我想在我的Accounts
表中的列CreatedDate
,定義如下:如何在EF code-first 4.3中爲CreatedDate列使用數據庫默認值?
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代碼優先顯式遷移。當EF產生的遷移帳務表,我修改它如下:
CreatedDate = c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()"),
不幸的是,當我嘗試映射使用EF 4.3該表中,EF試圖插入NULL值在CreatedDate列。
我試着爲屬性as suggested by Ladislav Mrnka設置DatabaseGeneratedOption.Identity。但是,這會從主鍵屬性中刪除標識選項。我嘗試使用DatabaseGeneratedOption.Computed代替,但它繼續嘗試插入NULL。我恢復了所有的移民並重新開始他們 - 問題仍然存在。
下面是我在做什麼在OnModelCreating
:
modelBuilder.Entity<Account>().Property(a => a.CreatedDate)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
有沒有人有什麼建議?
感謝您的幫助,
理查德
謝謝拉迪斯拉夫!有用。我使用DatabaseGeneratedOption.Identity標記了CreatedDate和我的ID列。我把它留在我的實體中可爲空,而在數據庫中不可爲空 - 但是使用Identity選項,它不再插入顯式NULL。 –