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