如何在 EF7(Core) 中创建与同一个表的多个关系?

Posted

技术标签:

【中文标题】如何在 EF7(Core) 中创建与同一个表的多个关系?【英文标题】:How can I create multiple relationships to the same table in 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'上已经存在同名的导航属性。

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

谢谢!

【问题讨论】:

【参考方案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/issues/4069 https://github.com/aspnet/EntityFramework/issues/4261

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

rowanmiller 于 1 月 8 日发表评论

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

【讨论】:

以上是关于如何在 EF7(Core) 中创建与同一个表的多个关系?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用同一个连接表创建多个多对多关系 [EF7/Core]

如何在 Mosaic 中创建与任何外部数据库的连接?

如何在另一个 DataMap 中创建与 ObjEntity 的关系?

如何在熊猫中创建与多列相结合的数据框列

如何在 MySQL/MariaDB 中创建与 root 具有相同权限的用户? [关闭]

如何在代码中创建与 @"H:|-10-[view]" 完全相同的 NSLayoutConstraint 对象?