我是否需要使用Fluent API配置与Entity Framework的关系的两面?

时间:2016-09-24 16:53:01

标签: entity-framework ef-fluent-api

我是Fluent API的新手。在我的方案中,Student可以在一个Grade中,Grade可以有多个Students。然后,这两个陈述完成了同样的事情:

modelBuilder
.Entity<Student>()
.HasRequired<Grade>(s => s.Grade)
.WithMany(s => s.Students);

modelBuilder
.Entity<Grade>()
.HasMany<Student>(s => s.Students)
.WithRequired(s => s.Grade);

我的问题是 - 我应该如何选择另一个声明呢?或者我是否需要这两种陈述?

2 个答案:

答案 0 :(得分:5)

对于像你这样的双向关系(即当两端都有导航属性时),它并不重要,你可以使用其中一个(你也可以同时使用它们,但它和#39;不推荐,因为它是多余的,可能导致两者之间不同步。)

当您具有单向关系时,这非常重要,因为只有With方法具有无参数重载。

想象一下,你没有Grade.Students财产。然后你只能使用:

modelBuilder.Entity<Student>()
    .HasRequired(s => s.Grade)
    .WithMany();

如果您没有Student.Grade财产,那么您只能使用:

modelBuilder.Entity<Grade>()
    .HasMany(s => s.Students)
    .WithRequired();

答案 1 :(得分:1)

你只需要一个。这对于1 : M关系来说已经足够了。

modelBuilder.Entity<Student>()
            .HasRequired<Grade>(s => s.Grade) //Student entity requires Grade 
            .WithMany(s => s.Students); //Grade entity includes many Students entities