2012-11-08 40 views
2

我正在使用EF 5 Code Fist並指定一些自定義對象與流暢API的表映射。水木清華這樣的:是否可以通過FluentApiMapper設置默認值?

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
    //Account Service 
    modelBuilder.Entity<ACCOUNT>().ToTable("ACCOUNT", "T70_AccountService"); 
    ... 
    modelBuilder.Entity<ACCOUNT>() 
    .Property(p => p.Created).HasColumnType("DateTime") 
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed); 

我希望能夠做的就是添加一個extetion將允許添加

.HasDefaultValue('(getdateutc()'); 

這可能嗎?任何想法如何?

+0

你可以簡單地使用POCO類的構造函數初始化使用默認值的新對象。 –

+0

你能舉一個如何做到這一點的例子嗎? –

+0

@JoeFrambach在你的類定義的地方做類似這樣的事情 - public class ACCOUNT {public ACCOUNT(){Created = DateTime.Now; } public DateTime Created {get;組; }} - 這被稱爲類的默認構造函數。也可以使用可用於創建新對象的參數來創建重載構造函數。 – pwdst

回答

0

簡短的回答是:不,沒有API(尚?)用於在代碼優先中設置默認值。

較長的答案是:不。第二個最好的(但遠遠落後)是使用數據庫初始化一個DDL查詢發送到數據庫:

protected override void Seed(DbContext context) 
{ 
    context.Database.ExecuteSqlCommand(
     "ALTER TABLE [T70_AccountService] ADD DEFAULT (getutcdate()) FOR [Created]"); 
} 
+0

好吧,這是一個解決方案。任何想法如何找到所有對象,以及它們映射到的表的名稱? http://stackoverflow.com/questions/13294780/ef-5-code-first-dbmigration-automation – Marty

+0

應該很簡單,但不是。映射信息埋藏在MetadataWorkspace的深處。我希望有一天會改變。 –

0

好消息,代碼首先現在支持這一點。在生成的遷移「向上()」方法,指定一個默認的語法如下:

AddColumn("[table name]", "[column name]", c => c.Boolean(nullable: false, defaultValue: false));