ОШИБКА вставки в первой базе данных кода EF 4.1

#asp.net-mvc-3 #ef-code-first #entity-framework-4.1

#asp.net-mvc-3 #ef-code-first #entity-framework-4.1

Вопрос:

Я использую Visual Studio 2010 SP1 с обновлением MVC3 Tools и EF 4.1 Code First для создания каркаса базы данных моего приложения.

Операции CRUD базы данных работают нормально при локальном тестировании и в локальной базе данных. Только после того, как я перенесу базу данных на SQL Server 2008 R2 веб-хостинга и укажу эту размещенную базу данных в строке подключения, все операции вставки завершатся неудачей.

Всякий раз, когда я пытаюсь добавить новую запись, я получаю эту ошибку: [I] Не удается вставить значение NULL в столбец ‘Id’ таблицы ‘DB_23378_bloomlmsdata.dbo.Courses’; столбец не допускает нулевых значений. ОШИБКА вставки. Оператор был завершен.[/ I]

Все мои модели данных определяют первичный идентификационный ключ следующим образом:

 [Key]
public int Id {get; set;}
...
  

И в локальной базе данных, которая преобразуется в каркас, я вижу не обнуляемый первичный идентификационный ключ в каждой таблице.

Я где-то читал, что Entity Framework при выполнении операции вставки в базу данных сначала попытается вставить запись с нулевым значением в качестве первичного ключа. Я не знаю, как переопределить это поведение. Кроме того, это, похоже, не является распространенной проблемой, и люди обычно сталкиваются с этим только тогда, когда они используют что-то отличное от ключа идентификации. Для справки, у меня была такая же проблема с EF CodeFirst CTP5 до выхода EF 4.1.

Я устранял неполадки в течение 4 недель.. Мой веб-хост обновлен с технологией, которую я использую в своем приложении и базе данных. Когда я пытаюсь получить помощь, они говорят мне, что это проблема с кодированием, но мой код проверяется. Любые идеи будут высоко оценены.

Комментарии:

1. Используете ли вы автоматически сгенерированные значения идентификаторов (Identity) в базе данных?

2. Работает ли это при выполнении команды INSERT из SQL Server Management Studio? Вы также могли бы протестировать DbContext.Database.ExecuteSqlCommand выполнение необработанной команды SQL INSERT, просто чтобы сузить проблему.

3. @Siva — Я уже пробовал это однажды, но спасибо. @Slauma — Собираюсь попробовать это, как только смогу, спасибо.

Ответ №1:

Проверьте свойство IsIdentity столбца Id, для него должно быть установлено значение yes. EF не передает значение для столбца identity при вставке, потому что оно должно быть автоматически сгенерировано базой данных.