#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 при вставке, потому что оно должно быть автоматически сгенерировано базой данных.