Почему EF DataBase First не использует getdate()?

Я использую EF 4.1 с базой данных в первую очередь.

Пример таблицы:

CREATE TABLE dbo.Product(
   [ID] [int] IDENTITY(1,1) not null,
   Title nvarchar(200) not null,
   CreateDate datetime not null default(getdate()),
)

Когда я добавляю новую строку, я получаю исключение из-за переполнения типа DateTime.

getdate() настроек базы данных недействительны.

Я должен быть установлен storeGeneatePattern собственность createdate поле для Computed,

Есть ли способ, чтобы EF автоматически генерировал DateTime столбец без установки вручную

2 ответа

Решение

Ни один EF никогда не будет использовать вашу базу данных по умолчанию. Причина в том, что ваша сущность имеет DateTime имущество. Это свойство по умолчанию имеет назначенное значение по умолчанию в.NET, которое составляет 1.1.0001. EF не знает, присвоили ли вы это значение или оно является значением по умолчанию, поэтому оно всегда явно передает это значение в базу данных. То же самое происходит, если вы используете обнуляемый тип, но в этом случае EF будет явно равен нулю. В обоих случаях значение по умолчанию из базы данных не будет применено, поскольку это значение применяется только в том случае, если значение из приложения не передается явно в команде вставки - EF явно передает все значения из объекта.

Вы можете сделать это в своем Product конструктор класса сущности,

public class Product{
  public Product(){
     CreateDate =DateTime.Now;
  }
}
Другие вопросы по тегам