Как использовать базу данных по умолчанию для столбца CreatedDate в EF code-first 4.3?

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);

У кого-нибудь есть предложения?

Спасибо за помощь,
Ричард

5
задан Community 23 May 2017 в 12:24
поделиться