Отключение создания значения по умолчанию Entity Framework (Code First) - PullRequest
9 голосов
/ 27 июля 2011

У меня есть столбец в базе данных, который не может быть нулевым, и я хочу установить для него значение по умолчанию в базе данных .Проблема в том, что структура сущностей, похоже, сама создает значение по умолчанию (например, int => 0) и полностью игнорирует ограничение значения по умолчанию в базе данных.

Есть ли способ отключить это значение по умолчанию длярамки сущности?

Ответы [ 5 ]

6 голосов
/ 26 декабря 2011

Я обнаружил, что вы можете украсить свои поля следующим атрибутом.

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
3 голосов
/ 29 мая 2012

«Вычисляемые» поля в EF не совпадают с полями со значениями по умолчанию в SQL. Вычисляемое поле - это поле, которое вычисляется на сервере и не должно изменяться при отправке объекта. Если вы поместите тег Computed в поле, вы получите значение по умолчанию при первом создании объекта, но затем вы не сможете изменить это поле позже. Итак, если вы получаете сущность из БД, вносите изменения в вычисляемое поле и затем вызываете «saveChanges ()» в контексте вашей сущности, поле в БД не будет изменено.

Лучше использовать значения по умолчанию EF, установив значение по умолчанию для атрибута в редакторе EDMX.

Беда в том, что средство обновления EDMX не может прочитать значения по умолчанию для поля, когда между полем сущности и полем базы данных существует однозначное сопоставление.

3 голосов
/ 27 июля 2011

Иногда нам нужно делать вручную то, что EF не делает автоматически для нас.

В случае использования EF 4.1 «Code First» я обычно создаю отдельный класс DbInitializer, производный от IDatabaseInitializer, и в реализацииметода InitializeDatabase, просто вызовите

context.Database.ExecuteSqlCommand("ALTER TABLE TABLENAME ... ");

Теперь в статическом конструкторе класса, производного от DbContext, просто вызовите инициализатор:

Database.SetInitializer(new DbInitializer());

Таким образом, можнозадайте любые команды DML / DDL базы данных для изменения таблиц / столбцов, просто чтобы убедиться, что БД соответствует нашим требованиям.

3 голосов
/ 27 июля 2011

Собственно, Entity Framework не позволяет этого.Вы должны сделать некоторый код для этого. Этот ответ с другого сайта , похоже, решил проблему для многих людей.

Он "взламывает" его (как он сказал), делая что-то вроде этого:1007 * Примечание 1: Кто-то упоминает, что он может не работать в EF4

Личное примечание: извините за мой английский, я обычно говорю по-французски.

0 голосов
/ 27 июля 2011

Вы можете обновить модель EDMX, чтобы изменить значение по умолчанию для любого столбца через окно свойств.Однако Entity Framework, похоже, не воспринимает ограничения DEFAULT автоматически.Не уверен, есть ли способ сделать это.

...