Ошибка вставки в Code First без ключа идентификатора - PullRequest
2 голосов
/ 21 сентября 2011

Я определил класс модели со столбцом идентификатора, установленным как [Ключ], в существующей таблице базы данных. таблица имеет поле, определенное как первичный ключ, int, а не null. Это НЕ и идентификационный столбец.

При создании новой записи в коде я устанавливаю столбец идентификатора (в уникальное значение) в коде перед вызовом метода SaveChanges ().

Метод возвращается с ошибкой:

Невозможно вставить значение NULL в столбец 'xxx_id', таблица 'Xxx.dbo.xxxxxx'; столбец не допускает пустых значений. Вставить не удается. заявление было прекращено.

Кажется, что EF предполагает, что столбец ID является столбцом Identity, и поэтому не передает идентификатор в вызове SQL в базу данных.

Есть ли способ определить столбец ID, чтобы сообщить EF, что это не столбец Identity, и передать значение в вызове SQL

1 Ответ

9 голосов
/ 21 сентября 2011

Вам необходимо указать DatabaseGeneratedOption для свойства. В этом случае DatabaseGeneratedOption должен быть None.

См .: http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.databasegeneratedoption%28v=vs.103%29.aspx

Я обычно делал это с беглой конфигурацией, например:

Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

.. но, похоже, это также можно указать с помощью атрибута. Смотри http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.databasegeneratedoption%28v=vs.103%29.aspx

[DatabaseGenerated(DatabaseGeneratedOption.None)] 
...