实体框架,具有主键,该主键是对具有复合主键的实体的引用

时间:2011-10-10 21:02:22

标签: c# entity-framework-4

所以我有一个具有复合主键的类:

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类也有一个复合键。

1 个答案:

答案 0 :(得分: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属性错误 - &gt;已更正。)