0

양 끝이 필요한 두 엔터티간에 일대일 관계를 만들려고합니다. 이것들은 기본 엔티티입니다.EF 코드와 일대일 관계 첫 번째 - 외래 키가 올바르지 않음

public class EntityA 
{ 
    public int? EntityAID {get; set;} 
    public virtual EntityB EntityB {get; set; 
} 

public class EntityB 
{ 
    public int? EntityBID {get; set;} 
    public virtual EntityA EntityA {get; set; 
} 

관계를 구성하는 데 사용하는 EntityA에 대한 EntityTypeConfiguration 객체가 있습니다. entityA를 관계의 주체로 만들고 싶습니다.이 프로세스를 올바르게 이해하면 EntityB는 데이터베이스 테이블에서 EntityA에 대한 외래 키를 갖게됩니다. 내 구성 양식은 다음과 같습니다

HasRequired(e=>e.EntityB).WithRequiredPrincipal(e=>e.EntityA); 

코드 첫 마이그레이션으로 데이터베이스를 업데이트하고 있습니다. 이 관계를 설정하는 마이그레이션을 생성 할 때 마이그레이션은 EntityB에 대한 외래 키를 테이블에 외장 키를 지정해야하지만 EntityB에 대한 외래 키를 EntityB에 대한 기본 키로 생성하므로, 예 :

.ForeignKey("dbo.TableForEntityB", t => t.EntityBID) 

외래 키로 ID를 사용해야합니다.

내가 뭘 잘못하고 있는지 누가 알 수 있습니까? 나는 혼란 스럽다. WithRequiredDependent를 사용해 보았습니다. TableForEntityA에서 동일한 상황이 발생했습니다.

감사합니다.

+0

양쪽 모두를 요구할 수는 없습니다. 이것은 EF 제한조차도 데이터베이스 제한 사항이 아닙니다. 엔티티 중 하나가 항상 상위 엔티티 (즉, 먼저 삽입 됨) 여야합니다. 이것을 바탕으로 질문을 업데이트하고 답변을 얻을 수 있습니다. – SOfanatic

답변

0

이것은 EF에서 구현 한 일대일 관계에 대한 오해에서 비롯된 것입니다. 필자는 EF가 일대일 관계 형성을 할 때 공유 기본 키 관계를 사용한다는 것을 읽고 알아 냈습니다. 따라서 I는 다음과 같이 변경하는 EntityB :

public class EntityB 
{ 
    public int? EntityAID {get; set;} 
    public virtual EntityA EntityA {get; set; 
} 

하고 다음과 같이 구성 관계 :

HasRequired (c => c.EntityA) .WithRequiredDependent (p => p.EntityB)를;

EntityB를 구성 할 때.

0

나는 여기서 추측을하고 있지만 외래 키는 EntityB 테이블의 기본 키에 생성되지 않는다고 생각합니다. EntityB 클래스의 EntityBID은 의 기본 키가 아니기 때문에 Nullable 유형으로 지정 했으므로 분명히 무엇입니까?

관련 문제