2011-05-01 5 views
3

저는 자식 (1 또는 0)을 가질 수있는 엔티티를 갖고 싶습니다. 이 하위 항목은 상위 항목과 동일한 유형입니다. 엔티티 프레임 워크를 설정하는 방법을 모르겠다. 모든 엔티티에 대해 두 개의 탐색 속성을 갖고 싶기 때문이다. 하나는 자녀에게 항해하기위한 것이고 다른 하나는 부모에게 항해하기위한 것입니다. 기본적으로 그것은 이중 연결리스트와 정확히 같은 구조입니다.일대일 자기 관계 및 엔티티 프레임 워크

int | id  | PK 
int | id_next | FK 
text | data 

하지만 내가 어떻게 다음/이전 항목에 대한 탐색 속성을 만들 수 있습니다

나는이 테이블 구조가 충분해야한다고 생각? 다음 항목에 대한 탐색 속성 만 만들 수 있습니다. 도움을

감사합니다.

답변

2

수 없습니다. 여기서 문제는 일대일 관계가 매우 특정한 요구 사항을 가지고 있다는 것입니다. FK 값은 전체 테이블에서 고유해야합니다. 유일성이 시행되지 않으면 동일한 부모를 가리키는 두 번째 엔티티를 추가 할 수 있으며 일대 다 관계가 있습니다.

예제에서 설명한 것처럼 자기 참조 관계에 적용하려면 id_next에 고유 색인을 붙이면 SQL 서버에서 작동합니다. 문제는 엔티티 프레임 워크가 고유 키를 지원하지 않는다는 것입니다. 그 때문에 엔티티 프레임 워크는 두 개의 서로 다른 엔티티 유형간에 일대일 관계를 구축 할 수 있습니다. 여기서 엔티티 유형이 종속 인 FK가 PK 인 경우 (FK를 강제하는 유일한 방법) = 두 엔티티 모두 동일합니다 PK 값. 한 테이블에 두 개의 동일한 PK 값을 가질 수 없기 때문에 자체 참조 관계에서는 작동하지 않습니다.

0

Research Entity Framework의 트리 구조. 기본적으로 수직 트리 (즉, 하나의 가지)를 원합니다. 프레임 워크는 하나의 브랜치 만 적용하지는 않지만 비즈니스 로직에서이를 관리 할 수 ​​있습니다.

2

엔터티에 0..1 -> 0..1 관계를 지정하여 EF4에서이 작업을 수행 할 수 있습니다. 탐색 속성 "이전"과 다른 "다음"중 하나의 이름을 지정하십시오. 기본 DB에 숨겨진 필드가 생성됩니다.

이 방법을 철저히 테스트하지는 않았지만 데이터베이스 스크립트를 만들 때 작동하는 것처럼 보였습니다.