Я подумал, что было бы полезно получить окончательный ответ о том, когда следует использовать WithOptionalDependent
и когда использовать WithOptionalPrincipal
. Помощь для двух функций немного неясна, и я нахожусь в поиске нескольких ответов и ответов на переполнение стека на других сайтах, сочетающих ответы, чтобы быть уверенными, что у меня сложились отношения в правильном направлении.
Здесь MSDN говорит о WithOptionalDependent
:
Настраивает связь как необязательную: необязательно без навигационной собственности на другой стороне отношений. Лицо тип, который будет сконфигурирован, будет зависимым и содержать внешний ключ к директору. Тип объекта, для которого цели отношений будут быть главным в отношениях.
и вот что он говорит о WithOptionalPrincipal
:
Настраивает связь как необязательную: необязательно без навигационной собственности на другой стороне отношений. Лицо тип, который будет сконфигурирован, будет основным в отношении. тип объекта, что целевые показатели отношений будут зависимыми и содержат внешний ключ для принципала.
Строка "Конфигурируемый тип объекта" - это та часть, которая меня всегда смущает (и я предполагаю, что другие).
В этом примере:
class MyEntityA
{
[Key]
public int Id { get; set; }
public int BId { get; set; }
[ForeignKey("BId")]
public MyEntityB B { get; set; }
}
class MyEntityB
{
[Key]
public int Id { get; set; }
}
modelBuilder.Entity<MyEntityA>().HasOptional(a => a.B).WithOptionalDependent();
: "Тип объекта настроен", относящийся к MyEntityA
или MyEntityB
? Я предполагаю, что это первый.
Если это правильно, какой пример использования WithOptionalPrincipal
?
Я действительно думаю, что в моем примере кода это действительно должно быть WithMany
и ни один из параметров WithOptional. Ясно, я все еще смущен!
Есть перегрузки для обеих этих функций, которые перехватывают свойство навигации в другом направлении. Я предполагаю, что эти перегрузки не меняют эти ответы, но, пожалуйста, поправьте меня, если я ошибаюсь.
Я надеюсь, что это будет полезно и для более крупного сообщества.