2009-05-12 6 views
0

예를 들어 다음 데이터베이스 모델을 고려해보십시오.Entity Framework를 사용한 연결 상속

  • USERTABLE (ID, 이름)
  • TextContentTable (ID, 이름, 설명 CreatedByUserId, ModifiedByUserId,는 TextContent)
  • ImageContentTable (ID, 이름, 설명 CreatedByUserId, ModifiedByUserId, ImageContent)

다음 개체 모델을 만들고 싶습니다. 그러나 그것은 가능한가?

  • BaseEntity (ID)
  • DescriptiveEntity (이름, 설명) : 예를 들어 BaseEntity
  • TrackedEntity (CreatedBy, ModifiedBy) : DescriptiveEntity
  • 사용자 (아이디) : BaseEntity
  • TextContent (텍스트) : TrackedEntity
  • ImageContent (이미지) : TrackedEntity

내 표기법을 이해하고 있지만 (굵게 표시된) 연결을 개별 테이블에 매핑 할 수 있습니까? TextContentTable & ImageContentTable?

고지.

+1

나는 귀하의 표기법을 이해한다고 생각합니다. 어떻게 CreatedBy와 ModifiedBy를 두 테이블에 매핑 할 수 있습니까? 내가 읽은 방법은 ImageContentTable에만 ModifiedByUserId가 있습니까? 그게 실수였습니까? –

+0

Oeps 실수로 제 질문을 수정하겠습니다. TextContentTable에는 ModifiedByUserId 열도 있어야합니다. – JSC

답변

1

현재 접근 방식의 Entity Framework에서이 방법이 좋은 아이디어인지 확신 할 수 없습니다. TextContent와 같은 유형이 BaseEntity와 같은 유형을 상속하는 경우 기본 유형과 동일한 엔티티 세트가 있어야합니다. 질문에 설명 된 전략을 사용하면 응용 프로그램의 모든 엔터티에 동일한 엔터티 집합이 적용됩니다. 그게 네가 원하는지 확신 할 수 없다.

그러나 인터페이스를 통해 많은 효과를 얻을 수 있습니다. 예를 들어, id 속성을 노출하는 IEntity 인터페이스를 가질 수 있습니다. 또 다른 인터페이스 인 ITrackedEntity는 CreatedBy와 ModifiedBy를 노출 할 수 있습니다. 기타

이것은 이상적은 아니지만 현재로서는 충분히 만족 스럽습니다. 실제로이를 구현하기 위해 T4 템플릿을 통해 codegen을 사용합니다.

다음 버전의 Entity Framework에는 단일 엔터티 집합을 요구하지 않고이 상속 패턴을보다 쉽게 ​​구현할 수있는 기능이있을 수 있습니다.

+0

우선 anxser에 대해 모든 고맙습니다. 이제는 현재의 운송 버전에서는 이것이 가능하지 않음을 이해 하겠지만 MS가 이러한 종류의 객체 모델에 대해 생각하기를 바랍니다. 내가 인터페이스로 내 일을하려고 할 것입니다, 그것은 멀리 이상적이지만 나는 지금 당장 그것과 함께 살 수 있다고 생각합니다 ;-) 당신은 T4 템플릿이 인터페이스를 구현하는 언급하지만 그걸 설명 할 수 있습니다. – JSC

+0

T4 것은 간단합니다. 인터페이스 지원은 모든 클래스에서 동일합니다. 따라서 잘라내어 붙여 넣기보다는 클래스 이름 배열을 사용하고 T4를 사용하여 배열의 모든 클래스에 대한 코드를 생성합니다. 인터페이스를 구현하는 부분 클래스를 생성합니다.EF의 다음 버전에서는 T4를 통해 EF 자체에서 사용하는 codegen을 사용자 정의 할 수 있습니다. –

관련 문제