2

我正在創建新模型,我將讓EF爲其生成數據庫。模型看起來像這樣:實體框架CTP5,Code-First。通過對象模型幫助創建參考表

public class Model 
{ 
    public int Id { get; set; } 
    public string StyleNumber { get; set; } 
    public virtual IList<Metal> Metals { get; set; } 
    public virtual IList<ModelImage> Images { get; set; } 
} 

public class Metal 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 
} 

我想金屬是一個參考表w /兩列,「說明」字段是唯一的。相反,EF使用引用模型ID的附加列創建金屬表。有沒有簡單的方法通過數據註釋或流體API來改變行爲?

回答

3

EF認爲您在Model & Metal之間具有一對多關係,並且最簡單的方法是將模型ID存儲在Metal表中。 如果你想保持金屬表'乾淨'(即沒有關係數據),那麼關係數據必須存儲在一個單獨的表中,但通過這樣做,你也隱含地改變了金屬模型之間的關係。 如果你真的想要這樣做,比你可以告訴EF你想要一個模型&金屬之間的單向多對多關係。 你可以在DbContext的OnModelCreating函數中這樣做。

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Model>().HasMany(o => o.Metals).WithMany(); 
} 
1

Steven K的答案對於刪除Metal表上的外鍵條目是正確的,但是它不會強制描述字段的唯一要求。這並不是他的錯,因爲不幸的是,EF Code First還沒有唯一的約束註釋。