实体框架代码优先一对一双向导航

时间:2018-06-26 08:12:12

标签: entity-framework one-to-one

到目前为止,在我搜索过的每个地方,实体框架中的所有一对一关系都有一个主体和一个从属实体。我想要的是两个主要实体之间的一对一关系。

因此,让我们设置一个示例。想象一下汽车发动机和汽车。汽车引擎可以没有汽车而存在,汽车可以没有汽车引擎而存在。可以将汽车引擎 放置在汽车中(可选),并且将汽车 放置在汽车中(可选)。我希望能够LoadAsync拥有汽车引擎(如果有)时关联的汽车,以及拥有汽车(如果有)时关联的汽车引擎。

如您所见,我不能使用委托人和从属实体来实现这一点。

实体应如下所示:

public class Car
{
    [Key]
    public string SN { get; set; }
    public string Plate { get; set; }

    public string IncludedEngineId { get; set; }
    [ForeignKey("IncludedEngineId")]
    public virtual Engine IncludedEngine { get; set; }
}

public class Engine
{
    [Key]
    public string SN { get; set; }
    public int CC { get; set; }

    public string PlacedInCarId { get; set; }
    [ForeignKey("PlacedInCarId")]
    public virtual Car PlacedInCar { get; set; }
}

但是,如果我这样做,汽车C1可能具有IncludedEngineId E1,但E1可能具有PlacedInCarId C2!不会在C1和E1之间建立“配对”。

有没有一种方法可以使用注释来实现?如果没有,有没有办法使用流利的api?还是我必须将其实现为业务逻辑?

1 个答案:

答案 0 :(得分:0)

似乎这是两个表之间的一种循环引用,希望EF不支持此功能。您要么必须为两个表创建单独的表,要么对此进行编码。