2012-06-07 6 views
2

EF Code First를 사용하는 데 약간의 문제가 있습니다. 그래프 구조를 모델링합니다. 내 응용 프로그램 내의 수많은 구체적인 객체가 여러 유형의 에지와 관련된 노드가 될 수있는 상황이 있습니다.EF CF 방향성 그래프 모델링 CF

예를 들어, 두 사용자 오브젝트 (같은, 혐오가 관련)의 관계를 가질 수 있지만, 각각의 동등 개체의 다른 형태에 관한 수

("볼"페이지 등의 메시지를 "좋아") 이 응용 프로그램 내에서 모델을 만들려면 모든 가능한 노드가 상속되는 GraphNode의 기본 클래스를 사용하고 각 GraphNode에는 모서리 모음이 있습니다. 각 Edge에는 SourceNode, DestinationNode 및 RelationshipType (가중치로 사용)이 있습니다.

나는이 객체를 소스 객체 ID와 DestObjectObjectID 필드가 연결된 에지, SourceObjectType 및 DestinationObjectType 필드의 PK가되는 직선적 인 데이터베이스 우선 개발로 모델링하는 방법을 알고 있습니다. 이는 관련 객체의 유형이지만 사이트에는 EF 코드 첫 구현이 필요합니다.

필자는 TPT 상속을 사용하고 있으므로 GraphNodeID 인 PK가있는 GraphNode 테이블을 얻었습니다.하지만이 테이블을 각각의 테이블에 대해 PK로 사용하고 있습니다. 문제를 야기 할 자체 PKs 대신에 구체적인 유형을 사용합니다.

누구든지이 작업을 수행 했습니까? 아니면 누구든지이 작업을 수행 할 수있는 올바른 방향을 제시 할 수 있습니까?

답변

0

알다시피, 상속은이 시나리오에 적합하지 않습니다.

NHibernate와 같은 다른 ORM은 "이기종 연관"에 대한 기본 지원을 제공합니다. EF가 아니기 때문에이 문제를 "서비스"계층 (즉, 컨트롤러/뷰 모델과 DbContext 사이)에서 처리하는 것이 해결책입니다.

내가하는 일은 모든 엔티티와 관련된 요소 (내 경우 메모 또는 설명)를 저장하고 검색 할 수있는 추상화를 만드는 것입니다. 엔티티 유형과 참조 된 객체의 ID를 수동으로 저장하여이를 수행합니다.

이것은가 아닌 아직 영속 엔티티와 요소를 연결하려는 경우를 제외하고는 대부분 사소한 (내가 처리 나의 DbContext의 일부 콜백 사용)

+0

거의 내가하고 결국 한 것 같은 소리를. 내가 기대했던 것만 큼 우아하지는 않을지 모르지만, 분명히 내가 알고있는 패턴이다. 나는 일종의 node-less 버전을 선택할 것이다. 그래서 EF 엔티티는 단지 SourceID, SourceType, DestinationID, DestinationType 및 RelationshipType이있는 Edge 일 뿐이다. 제안한대로, 나는 관계는 지정된 유형 및 ID에 의한 선택을 기반으로 데이터베이스에서 제외됩니다. –