2011-10-10 81 views
2

所以我有了一個複合主鍵類:實體框架,有一個主鍵,它是引用一個實體與複合主鍵

public class Field 
{ 
    [Key, Column(Order=0)] 
    [ForeignKey("Store")] 
    public int StoreID { get; set; } 
    public Store Store { get; set; } 

    [Key, Column(Order = 1)] 
    public int ID { get; set; } 


    public List<Template> Templates { get; set; } 
} 

...和另外一個引用它

public class Mapping 
{ 
    public Field Field { get; set; } 

    [ForeignKey("Template")] 
    public int TemplateID { get; set; } 
    public Template Template { get; set; } 
} 

這很好,除了Mapping缺少主鍵,因爲我不知道該怎麼做。 我想要的是類映射有一個由字段和模板組成的複合主鍵。我的困難在於Field類也有一個組合鍵。

回答

3

您需要像這樣:

public class Mapping 
{ 
    [Key, ForeignKey("Field"), Column(Order=0)] 
    public int StoreID { get; set; } 

    [Key, ForeignKey("Field"), Column(Order=1)] 
    public int ID { get; set; } 

    [Key, ForeignKey("Template"), Column(Order=2)] 
    public int TemplateID { get; set; } 

    public Field Field { get; set; } 
    public Template Template { get; set; } 
} 

對於ForeignKey屬性你可以指定一個組合鍵順序就像在Key屬性。另外,您也可以把導航屬性ForeignKey屬性,然後指定用逗號分隔的FK屬性:

public class Mapping 
{ 
    [Key, Column(Order=0)] 
    public int StoreID { get; set; } 

    [Key, Column(Order=1)] 
    public int ID { get; set; } 

    [Key, Column(Order=2)] 
    public int TemplateID { get; set; } 

    [ForeignKey("StoreID, ID")] 
    public Field Field { get; set; } 

    [ForeignKey("TemplateID")] 
    public Template Template { get; set; } 
} 

編輯重複Column屬性是錯誤的 - >修正)

+0

謝謝,這是完美的。 –