2014-07-17 36 views
1

我想爲所有實體手動插入id。 是否可以創建某種約定或我必須爲每個實體設置HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)(或添加DatabaseGenerated屬性)?Convention for DatabaseGeneratedOption.None

編輯

有一種簡單的方法來做到這一點,然後使用接受的答案:

modelBuilder.Conventions.Remove<StoreGeneratedIdentityKeyConvention>(); 

回答

4

有可能創造的EntityFramework 6習俗約定如下:

創建會議類

public class ManualIdentityConvention : Convention 
{ 
    public ManualIdentityConvention() 
    { 
     this.Properties<int>() 
      .Where(p => p.Name.EndsWith("Id")) 
      .Configure(p => p.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)); 
    } 
} 

會議添加到您的DbContext

public class Context : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Add(new ManualIdentityConvention()); 
    } 
} 

的EntityFramework 5

至於的EntityFramework 5,我相信可以實現類似的東西,但不是通過常規類:

public class Context : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Properties<int>() 
      .Where(x => x.Name.EndsWith("Id")) 
      .Configure(x => x.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)); 
    } 
} 

在任何一種情況下,這兩種方法都不是特別手術,但可以想象的是,通過在某人的where子句中更加具體來規定該慣例。

這有幫助嗎?

相關問題