Це посилається на відповідь @Ladislav Mrnka про використання вільних api для налаштування взаємовідносин один на один.
Була ситуація, коли мати це FK of dependent must be it's PK
було неможливо.
Наприклад, Foo
вже має стосунки один до багатьох Bar
.
public class Foo {
public Guid FooId;
public virtual ICollection<> Bars;
}
public class Bar {
//PK
public Guid BarId;
//FK to Foo
public Guid FooId;
public virtual Foo Foo;
}
Тепер нам довелося додати ще одне співвідношення один на один між Фо і Баром.
public class Foo {
public Guid FooId;
public Guid PrimaryBarId;// needs to be removed(from entity),as we specify it in fluent api
public virtual Bar PrimaryBar;
public virtual ICollection<> Bars;
}
public class Bar {
public Guid BarId;
public Guid FooId;
public virtual Foo PrimaryBarOfFoo;
public virtual Foo Foo;
}
Ось як визначити відносини один на один за допомогою вільних api:
modelBuilder.Entity<Bar>()
.HasOptional(p => p.PrimaryBarOfFoo)
.WithOptionalPrincipal(o => o.PrimaryBar)
.Map(x => x.MapKey("PrimaryBarId"));
Зауважте, що додавання PrimaryBarId
потрібно видалити, оскільки ми визначаємо це через вільні api.
Також зауважте, що назва методу [WithOptionalPrincipal()][1]
є іронічною. У цьому випадку Основним є адвокатська колегія. Опис WithOtionalDependent () на msdn робить це більш зрозумілим.