EF6一到多个流利的映射



在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答案中的所有点。但是,有一种情况(不是您的样本(,而不是偏爱问题,但是必须选择其中一个 - 单向 relatioships,即仅在一种关系中存在导航属性时。

在这种情况下,由于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超载至关重要。例如,如果您 do 具有导航属性,并且未指定它,则EF将其映射到与常规名为FK Shadow属性的另一种单向关系。

这只是个人喜好的问题吗?

是的。这只是个人喜好的问题。

有人说:一名球员属于一个团队(这是他当前的球队(

其他人可以说:一个团队由许多球员组成。

对于EF,这两种配置只是设置相同的内容:一对一的关系船无论您使用哪个实体开始配置。

只要他们说同一件事,只要保留其中一种配置就可以存在。

相关内容

  • 没有找到相关文章

最新更新