Dies bezieht sich auf die Antwort von @Ladislav Mrnka zur Verwendung einer fließenden API zum Konfigurieren einer Eins-zu-Eins-Beziehung.
Hatte eine Situation, in der FK of dependent must be it's PK
es nicht machbar war.
ZB hat Foo
schon eine Eins-zu-Viele-Beziehung zu 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;
}
Jetzt mussten wir eine weitere Eins-zu-Eins-Beziehung zwischen Foo und Bar hinzufügen.
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;
}
So spezifizieren Sie eine Eins-zu-Eins-Beziehung mit fließender API:
modelBuilder.Entity<Bar>()
.HasOptional(p => p.PrimaryBarOfFoo)
.WithOptionalPrincipal(o => o.PrimaryBar)
.Map(x => x.MapKey("PrimaryBarId"));
Beachten Sie, dass beim Hinzufügen PrimaryBarId
entfernt werden muss, da wir dies durch eine flüssige API angeben.
Beachten Sie auch, dass der Methodenname [WithOptionalPrincipal()][1]
irgendwie ironisch ist. In diesem Fall ist Principal Bar. Die Beschreibung von WithOptionalDependent () auf msdn macht es klarer.