I' Я хотел бы иметь столбец CreatedDate
в моей таблице Accounts
, определенный следующим образом:
CreatedDate DATETIME NOT NULL DEFAULT GETUTCDATE()
Это будет отображаться на свойство CreatedDate в классе:
public class Account
{
public DateTime? CreatedDate { get; private set; }
// ... other properties ...
}
При создании новой учетной записи , я бы хотел оставить CreatedDate равным NULL и позволить базе данных заполнить его. При загрузке существующей учетной записи из БД я хотел бы, чтобы EF извлекал CreatedDate, созданный базой данных.
Я использую EF 4.3 code-first с явными миграциями. Когда EF сгенерировал миграцию для таблицы Accounts, я изменил ее следующим образом:
CreatedDate = c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()"),
К сожалению, когда я пытаюсь отобразить таблицу с помощью EF 4.3, EF пытается вставить значение NULL в столбец CreatedDate.
Я попытался установить DatabaseGeneratedOption.Identity для свойства , как предложил Ладислав Мрнка. Однако это удаляет параметр идентификации из свойства первичного ключа. Вместо этого я попытался использовать DatabaseGeneratedOption.Computed, но он продолжает пытаться вставить NULL. Я отменил все миграции и перезапустил их - проблема все еще возникает.
Вот что я делаю в OnModelCreating
:
modelBuilder.Entity().Property(a => a.CreatedDate)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
У кого-нибудь есть предложения?
Спасибо за помощь,
Ричард