これは、1対1の関係を構成するためのFluent APIの使用に関する@Ladislav Mrnkaの回答を参照しています。
持つことFK of dependent must be it's PK
が実現不可能であった状況を持っていました。
たとえば、とFoo
既に1 対多の関係があり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;
}
ここで、FooとBarの間に1対1の関係をもう1つ追加する必要がありました。
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;
}
Fluent APIを使用して1対1の関係を指定する方法は次のとおりです。
modelBuilder.Entity<Bar>()
.HasOptional(p => p.PrimaryBarOfFoo)
.WithOptionalPrincipal(o => o.PrimaryBar)
.Map(x => x.MapKey("PrimaryBarId"));
PrimaryBarId
Fluent APIを使用して指定するため、追加は削除する必要があることに注意してください。
また、メソッド名[WithOptionalPrincipal()][1]
は一種の皮肉なことに注意してください。この場合、プリンシパルはBarです。msdnのWithOptionalDependent()の説明は、それをより明確にします。