이것은 일대일 관계를 구성하기 위해 유창한 API를 사용하는 것에 대한 @Ladislav Mrnka의 답변과 관련이 있습니다.
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;
}
이제 Foo와 Bar간에 일대일 관계를 추가해야했습니다.
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]
은 역설적입니다. 이 경우 교장은 바입니다. msdn에 OptionalDependent () 설명을 사용하면 더 명확 해집니다.