EF6导航属性相同类型到单个反向

时间:2015-04-02 19:56:09

标签: entity-framework ef-code-first navigation-properties

我不确定这是否可行。 假设我有这个:

public class Thing{
    public int ThingId {get; set;}
    public virtual Item ItemA {get; set;}
    public virtual Item ItemB {get; set;}
}

public class Item{
    public int ItemId {get; set;}
}

如何在Item上创建一个导航属性,将我带到ItemAItemB?或者我可以使用item.Thing!=null的东西? item.Thing.ItemAitem.Thing.ItemB

我尝试了很多东西,却无法让它发挥作用。

1 个答案:

答案 0 :(得分:0)

Thing类中有两个项目,这意味着单个项目可以是一个或多个事物的一部分。 (例如:对于Thing1,相同的项目可以是ItemA,而对于Thing2,它可以是ItemB)。在这种情况下,在Item表中不可能有一个FK列,因为它与Thing有一对多的关系。

您可以做的最好的事情是Item类有一个它所属的事物列表。您还可以确定它是ItemA的哪些东西以及它是ItemB for。

class Thing
{
    public int ThingId { get; set; }

    [InverseProperty("ItemAFor")]
    public Item ItemA { get; set; }

    [InverseProperty("ItemBFor")]
    public Item ItemB { get; set; }
}

class Item
{
    public int ItemId { get; set; }

    // Things where this Item is ItemA
    public List<Thing> ItemAFor { get; set; }

    // Things where this Item is ItemB
    public List<Thing> ItemBFor { get; set; }
}