指向复合键的外键

时间:2011-11-02 20:34:40

标签: c# entity-framework-4.1

我正在现有数据库上处理POCO实体模型。 一个表有一个复合键

public class Table1
{
  [Key]
  public virtual int Key1 {get; set;}

  [Key]
  public virtual int Key2 {get; set;}

  public virtual ICollection<Table2> Tables2 {get; set;}

  //more properties here...
}

和第二个没有主键的表,但有2个属性引用Table1的复合键。

public class Table2
{
  public virtual int Key1 {get; set;}

  public virtual int Key2 {get; set;}

  [InverseProperty("Tables2")]
  public virtual Table1 Table1 {get; set;}

  //more properties here...
}

问题是否可以使用DataAnnotations映射此关联? 如果是这样,怎么样?

1 个答案:

答案 0 :(得分:3)

是的,您可以使用数据注释定义复合外键:

public class Table2
{
    [ForeignKey("Table1"), Column(Order = 1)]
    public virtual int Key1 {get; set;}

    [ForeignKey("Table1"), Column(Order = 2)]
    public virtual int Key2 {get; set;}

    [InverseProperty("Tables2")]
    public virtual Table1 Table1 {get; set;}

   //more properties here...
}

或者:

public class Table2
{
    public virtual int Key1 {get; set;}

    public virtual int Key2 {get; set;}

    [InverseProperty("Tables2")]
    [ForeignKey("Key1, Key2")]
    public virtual Table1 Table1 {get; set;}

   //more properties here...
}

但真正的问题是您的Table2没有实体框架所需的主键。我不认为有任何解决方法可以解决此问题 - 除了向表中添加主键。