2011-10-10 71 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

谢谢,这是完美的。 –

相关问题