如何在 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]
如何在另一个 DataMap 中创建与 ObjEntity 的关系?