Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF6一对多Fluent映射_C#_Entity Framework_Entity Framework 6_One To Many_Ef Fluent Api - Fatal编程技术网

C# EF6一对多Fluent映射

C# EF6一对多Fluent映射,c#,entity-framework,entity-framework-6,one-to-many,ef-fluent-api,C#,Entity Framework,Entity Framework 6,One To Many,Ef Fluent Api,在EF6中,鉴于这两种方法的功能似乎相同,选择一种方法比另一种方法有什么优势吗 modelBuilder.Entity<Player>() .HasRequired(p => p.CurrentTeam) .WithMany(t => t.Players) .HasForeignKey(p => p.CurrentTeamId) .WillCascadeOnDelete(

在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);
这只是个人喜好的问题吗

这只是个人喜好的问题吗

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

有人说:一个球员属于一支球队,这是他现在的球队

其他人只能说:一支球队是由许多球员组成的

对于EF,这两种配置只是设置了相同的东西:一对多关系ship,不管您使用哪个实体启动配置


这两种配置可以存在,只要它们说的是相同的话,但只保留其中一种

我完全同意@CodeNotFound-answer的所有观点。但有一种情况不是您的样本,它不是偏好的问题,而是必须选择其中一种-单向关系,即当导航属性仅存在于其中一个关系中时

在这种情况下,由于EF6具有方法require navigation属性表达式,而With方法具有重载(带或不带navigation属性),因此您必须从具有navigation属性的实体开始配置。相反,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);

请注意,在重载情况下使用正确的方法是至关重要的。例如,如果您确实有导航属性,但未指定该属性,EF会将其映射到另一个具有传统命名FK shadow属性的单向关系。

谢谢-了解这一点非常有帮助。