我正在现有数据库上处理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映射此关联? 如果是这样,怎么样?
答案 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
没有实体框架所需的主键。我不认为有任何解决方法可以解决此问题 - 除了向表中添加主键。