Свободный API HasXXX против методов WithXXX

Я изучаю, как использовать свободный API отсюда:

http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx

Он говорит, что следующие 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 ответ

  1. Для первого modelBuilder.Entity<Student>().HasRequired<Standard>(s => s.Standard) указывает, что объект Student требует свойства навигации NotNull Standard и возвращает Standard юридическое лицо. Тогда вы используете .WithMany(s => s.Students)который указывает, что другая сторона Студента (означает стандартную сущность) может включать в себя множество Students в студенческой коллекции имущества.
  2. Во-вторых, прямо. modelBuilder.Entity<Standard>() возвращает Standard сущность, которая может включать в себя много Students в студенческой коллекции имущества. Так что вы должны использовать .HasMany<Student>(std => std.Students), Это вернет сущность Student, и вы должны определить для нее ограничение, используя .HasMany<Student>(std => std.Students)
Другие вопросы по тегам