gpt4 book ai didi

c# - EF6 一对多流畅映射

转载 作者:行者123 更新时间:2023-11-30 20:27:16 26 4
gpt4 key购买 nike

在 EF6 中,鉴于这两种方法的功能似乎相同,选择一种方法比另一种方法有什么优势吗?

modelBuilder.Entity<Player>()
.HasRequired(p => p.CurrentTeam)
.WithMany(t => t.Players)
.HasForeignKey(p => p.CurrentTeamId)
.WillCascadeOnDelete(false);

相同
modelBuilder.Entity<Team>()
.HasMany(t => t.Players)
.WithRequired(p => p.Team)
.HasForeignKey(p => p.CurrentTeamId)
.WillCascadeOnDelete(false);

这只是个人喜好问题吗?

最佳答案

我完全同意@CodeNotFound 回答中的所有观点。但有一种情况(不是您的示例),这不是偏好问题,而是必须选择其中之一 - 单向 关系,即当导航属性仅存在于其中一个关系端时。

在这种情况下,由于 EF6 Has 方法需要导航属性表达式,而 With 方法具有带和不带导航属性的重载,因此您被迫从具有的实体开始配置导航属性(相比之下,EF Core 没有这样的要求,所以这真的是一个偏好问题)。

因此,如果您没有集合导航属性,唯一的选择是:

modelBuilder.Entity<Player>()
.HasRequired(p => p.CurrentTeam)
.WithMany() // <--
.HasForeignKey(p => p.CurrentTeamId)
.WillCascadeOnDelete(false);

如果您没有引用导航属性,则:

modelBuilder.Entity<Team>()
.HasMany(t => t.Players)
.WithRequired() // <--
.HasForeignKey(p => p.CurrentTeamId)
.WillCascadeOnDelete(false);

请注意,使用正确的 With 重载至关重要。例如,如果您确实有导航属性但没有指定它,EF 会将其映射到另一个具有常规命名的 FK 影子属性的单向关系。

关于c# - EF6 一对多流畅映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48829172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com