我有一个代码第一个项目,在设计这个项目时,我遇到了一个困扰我的问题,希望这里的某个人能够提出解决方案。我有三张桌子,彼此有很多很多关系。所以我使用一个新实体解决了很多对很多,这个实体将成为数据库中的一个查找表。
我遇到的问题是实体框架不允许我在查询实体中使用A,B和C的实体,它希望我将ID添加到查找表中。这意味着我将允许重复数据,我不希望这样。
我试图在POCO中设置Key属性(不是很好的做法,但仍然尝试过),纯粹主义者会很高兴听到这不起作用所以我将其删除了。
public class ABC
{
[key]
[column(order=1)]
public virtual A A { get; set; }
[key]
[column(order=2)]
public virtual B B { get; set; }
[key]
[column(order=3)]
public virtual C C { get; set; }
}
由于这不起作用,我尝试使用映射文件并使用以下
public class ABCMappings : EntityTypeConfiguration<ABC>
{
public ABCMappings()
{
HasKey(x => new { A.Id, B.Id, C.Id});
}
}
在两种情况下,ABC也没有报告键没有定义。如果我因为EF而无法做到这一点,那么我想我将不得不使用上面描述的ID,但我想知道为什么我不能这样做或者解决方案会很棒。
答案 0 :(得分:0)
在POCO中设置按键时,您可以执行以下操作。
public class ABC
{
[Key, ForeignKey("A"), Column(order=0)]
public int AId {get;set;}
[Key, ForeignKey("B"), Column(order=1)]
public int BId {get;set;}
[Key, ForeignKey("C"), Column(order=2)]
public int CId {get;set;}
public virtual A A { get; set; }
public virtual B B { get; set; }
public virtual C C { get; set; }
}