2012-08-31 2 views
1

특별한 1 대 1 관계에 대해 특정 방식으로 테이블을 만들려면 Entity Framework를 가져 오려고합니다.Entity Framework에서 만든 사용자 지정 1 대 1 관계

public class Parent 
{ 
    public int ID { get; set; } 
    public string Title { get; set; } 
    public Child XYZ { get; set; } 
} 

public class Child 
{ 
    public string Property1 { get; set; } 
    public string Property2 { get; set; } 
    public string Property3 { get; set; } 
} 

Parent 클래스의 XYZ 속성이 Child의 인스턴스로 설정 될 수있다

의 내가 클래스 세트를 가지고 있다고 가정 해 봅시다. 나는 EF가 두 클래스 각각에 대한 테이블을 생성하고 Child 오브젝트에 대한 테이블은 Parent 오브젝트와의 관계를 유지하기 위해 이상적으로 "ParentID"라는 외래 키 컬럼을 가지고 있어야한다.

부모 테이블에 "ChildID"열을 넣지 않고 ID 또는 ParentID 속성을 Child 클래스에 추가하고 싶지 않습니다.

현재 Child 개체의 속성은 부모 테이블의 열로 만들어지며 XYZ 속성이 Child 클래스의 인스턴스로 설정되지 않은 경우 예외가 발생합니다. 즉, null 일 수 없습니다.

DbModelBuilder 및 OnModelCreating 이벤트를 사용하여이 작업을 수행하려고합니다. IsOptional method은 단순한 유형에서만 작동합니다.

제안 사항? EF에서도 가능합니까?

답변

2

현재, 자식 객체의 속성은 부모 테이블의 열 로 생성되며, XYZ 속성은 하위 클래스의 인스턴스에 대한 설정되어 있지 않은 경우 나, 예외가 IE는 할 수 없습니다 널이 되라. 현재 Child 복잡한 유형 (값 개체)이며 항상 (이 엔티티의 일부이며 법인이 부분없이 존재하지 않음)로 설정해야하기 때문에

예는 null 일 수 없습니다. 복합 유형의 내용이 선택 사항 인 경우 Child 자체가 아닌 하위 등록 정보에서이를 적용해야합니다.

하위 클래스에 ID 또는 ParentID 속성을 추가하고 싶지 않습니다.

당신은 Child 모든 개체가 기본 키가 있어야하기 때문에이 ID이 있어야합니다 별도의 테이블에 매핑하도록합니다. 그 ID는 달성하기 Parent에 외래 키로 사용됩니다 일대일 관계 :

public class Child 
{ 
    public int Id { get; set; } 
    public string Property1 { get; set; } 
    public string Property2 { get; set; } 
    public string Property3 { get; set; } 
} 

그리고 관계 매핑 :

modelBuilder.Entity<Parent>() 
      .HasOptional(p => p.XYZ) 
      .WithRequired(); 
+0

감사합니다. 글 머리 기호를 물고 자식 클래스에 ID 속성을 추가해야합니다. :) –

1

엔티티 프레임 워크가 같은 차를 공유하는 1-1 관계를 필요 키는 부모에게 외래 키가 있어야하며 해당 필드는 하위 키의 기본 키 여야 함을 의미합니다.

맘에 안들지만 EF는 다른 방법으로는 작동하지 않습니다. 따라서 여러분은 그것을 받아들이고 계속 나아가거나 다른 틀을 발견하게됩니다.

+0

글쎄, 나는 그것을 가질 수 없다고 생각한다. :) EF는 꽤 멋지다. 나는 테이블을 어떻게 만들어야하는지에 대한 내 의견으로 내 시간을 낭비하지 말아야한다. –