Bu, @Ladislav Mrnka'nın bire bir ilişkiyi yapılandırmak için akıcı api kullanma cevabına atıfta bulunuyor.
Sahip olduğu bir durum vardı FK of dependent must be it's PK
mümkün olmadığı .
Örneğin, Foo
zaten bire-çok ilişkisi var 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;
}
Şimdi, Foo ve Bar arasında birebir bir ilişki daha eklemek zorunda kaldık.
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;
}
Akıcı api kullanarak bire bir ilişki nasıl belirtileceği aşağıda açıklanmıştır:
modelBuilder.Entity<Bar>()
.HasOptional(p => p.PrimaryBarOfFoo)
.WithOptionalPrincipal(o => o.PrimaryBar)
.Map(x => x.MapKey("PrimaryBarId"));
PrimaryBarId
Eklerken, akıcı API ile belirttiğimiz için kaldırılması gerektiğini unutmayın .
Ayrıca yöntem adının [WithOptionalPrincipal()][1]
biraz ironik olduğunu da unutmayın . Bu durumda Müdür Bar'dır. Msdn'deki WithOptionalDependent () açıklaması bunu daha açık hale getirir.