实体框架连接查找键

时间:2014-06-26 08:18:18

标签: c# entity-framework

我有一个代码第一个项目,在设计这个项目时,我遇到了一个困扰我的问题,希望这里的某个人能够提出解决方案。我有三张桌子,彼此有很多很多关系。所以我使用一个新实体解决了很多对很多,这个实体将成为数据库中的一个查找表。

enter image description here

我遇到的问题是实体框架不允许我在查询实体中使用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,但我想知道为什么我不能这样做或者解决方案会很棒。

1 个答案:

答案 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; }
}