Свободный API HasXXX против методов WithXXX
Я изучаю, как использовать свободный API отсюда:
Он говорит, что следующие 1-многие отношения - это одно и то же:
modelBuilder.Entity<Student>()
.HasRequired<Standard>(s => s.Standard)
.WithMany(std => std.Students)
.HasForeignKey(std => std.StdId);
а также
modelBuilder.Entity<Standard>()
.HasMany<Student>(std => std.Students)
.WithRequired(s => s.Standard)
.HasForeignKey(s => s.StdId);
Из intellisense я заметил, что методы HasXXX возвращают целевой тип, а методы WithXXX возвращают родительский тип.
Поэтому я не понимаю, как действует первый подход, поскольку HasForeignKey применяется к стандарту, а не к ученику?
Внешний ключ должен быть на Студента, а не Стандарт.
Пожалуйста, просветите меня.
1 ответ
- Для первого
modelBuilder.Entity<Student>().HasRequired<Standard>(s => s.Standard)
указывает, что объект Student требует свойства навигации NotNull Standard и возвращаетStandard
юридическое лицо. Тогда вы используете.WithMany(s => s.Students)
который указывает, что другая сторона Студента (означает стандартную сущность) может включать в себя множествоStudents
в студенческой коллекции имущества. - Во-вторых, прямо.
modelBuilder.Entity<Standard>()
возвращаетStandard
сущность, которая может включать в себя многоStudents
в студенческой коллекции имущества. Так что вы должны использовать.HasMany<Student>(std => std.Students)
, Это вернет сущность Student, и вы должны определить для нее ограничение, используя.HasMany<Student>(std => std.Students)