2016-09-24 2 views
2

Je suis nouveau à l'API Fluent. Dans mon scénario, un Student peut être dans un Grade et un Grade peut avoir plusieurs Students. Ensuite, ces deux déclarations faire la même chose:Ai-je besoin de configurer les deux côtés d'une relation avec Entity Framework avec l'API Fluent?

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

Et:

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

Ma question est - comment dois-je choisir une déclaration sur l'autre? Ou ai-je besoin des deux déclarations?

Répondre

2

Pour bidirectionnelle relation comme la vôtre (lorsque les deux extrémités ont des propriétés de navigation), il n'a pas vraiment d'importance, vous pouvez utiliser l'un ou l'autre (vous pouvez aussi utiliser les deux, mais pas recommandé car c'est redondant et peut conduire à une désynchronisation entre les deux).

Il est vraiment important quand vous avez unidirectionnel relation parce que seules les méthodes With ont des surcharges sans paramètre. Imaginez que vous ne possédez pas la propriété Grade.Students. Ensuite, vous pouvez utiliser uniquement:

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

et si vous n'avez pas Student.Grade propriété, vous pouvez utiliser uniquement:

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

Vous avez juste besoin un .Ceci est plus que suffisant pour 1 : M relation.

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