【问题标题】:How can I create multiple relationships to the same table in EF7(Core)?如何在 EF7(Core) 中创建与同一个表的多个关系?
【发布时间】:2016-01-26 14:15:54
【问题描述】:

我正在尝试构建一个迁移,但它在以下类上绊了一下:

public class Unit
{
    public int UnitID { get; set; }
    ...
    public Nullable<int> PreviousUnitID { get; set; }

    [ForeignKey("PreviousUnitID")]
    public Unit PreviousUnit { get; set; }

    public Nullable<int> SubsequentUnitID { get; set; }

    [ForeignKey("SubsequentUnitID")]
    public Unit SubsequentUnit { get; set; }
}

“导航属性''不能添加到实体类型'Unit',因为实体类型'Unit'上已经存在同名的导航属性。

我假设这个有点奇怪的导航是罪魁祸首,所以我漏掉了其余的课程。有谁知道我可以规避这个问题的方法吗?

谢谢!

【问题讨论】:

    标签: c# entity-framework-core


    【解决方案1】:

    使用虚拟而不是单位

    public class Unit
    {
    public int UnitID { get; set; }
    public Nullable<int> PreviousUnitID { get; set; }
    public Nullable<int> SubsequentUnitID { get; set; }
    
    public Virtual PreviousUnit { get; set; }
    public Virtual SubsequentUnit { get; set; }
    }
    

    根据需要创建尽可能多的关系

    【讨论】:

    • 我要么没有 Virtual 类来自的库,要么你打算让 PreviousUnit / SubsequentUnit 成为虚拟属性,此时我仍在使用 Unit 类并且它没有解决问题。
    • 否定 - 我回滚到迁移 0 并再次尝试,仍然遇到相同的问题,因此尚未得到解答。
    【解决方案2】:

    使用 virtual 关键字:

    public virtual Unit PreviousUnit { get; set; }
    public virtual Unit SubsequentUnit { get; set; }
    

    完整代码:

    public class Unit
    {
    public int UnitID { get; set; }
    ...
    public Nullable<int> PreviousUnitID { get; set; }
    
    [ForeignKey("PreviousUnitID")]
    public virtual Unit PreviousUnit { get; set; }
    
    public Nullable<int> SubsequentUnitID { get; set; }
    
    [ForeignKey("SubsequentUnitID")]
    public virtual Unit SubsequentUnit { get; set; }
    }
    

    这也启用了单元的延迟加载。

    编辑: 也许这也有帮助:https://github.com/aspnet/EntityFramework/issues/3911

    【讨论】:

    • 我不相信在 EF7/EFCore 中配置了延迟加载。但不幸的是,无论如何,我在创建迁移时仍然遇到相同的导航属性问题。
    • 我认为它可能会有所帮助,但我没有通过迁移对其进行测试,因为我不确切知道您的最后配置。也许这会有所帮助:github.com/aspnet/EntityFramework/issues/3911
    • 哦,谢谢!我会留意的,可能不是当时的代码,只是早期的迁移。
    • 嗯,这似乎是 RC2 中正在修补的错误。 github.com/aspnet/EntityFramework/issues/4069
    【解决方案3】:

    这是 RC1 的一个已知问题。

    问题:

    开发链: https://github.com/aspnet/EntityFramework/pull/4239

    rowanmiller 于 1 月 8 日发表评论

    这将是 #4069,它在我们的夜间构建中得到修复,并将在 RC2 中发布。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 2019-07-30
      • 2022-06-16
      • 2022-01-19
      • 2015-05-09
      • 1970-01-01
      • 2019-07-30
      相关资源
      最近更新 更多