2013-10-17 3 views
2

상속 모델을 Entity Framework 5에 매핑하는 가장 좋은 방법을 누군가에게 말해 줄 수 있습니까? 때로는 버전이 중요하지 않지만이 경우에는 성능이 중요하며 EF5의 성능이 향상되기 때문에 버전이 중요합니다.Entity Framework 5 : 상속 및 다형성 연관

테이블 당 유형 (TPT) 및 계층 구조별 테이블 (TPH)이 유일한 방법은 아니지만 이러한 비교 방법이 있습니다. 복잡한 조인 때문에 TPT가 TPH보다 성능 쿼리가 낮다는 것을 알고 있습니다. 또한 TPH를 사용하면 테이블이 비정규 화되어 장기적으로 유지 관리가 어려워집니다.

나는 TPT와 성능 튜닝 기술에 기대고있다. TPH를 사용하는 것이 훨씬 간단 할 때 엔지니어링에 대한 접근 방식이 고려됩니까? 부정적인 유지 비용이 TPT의 부정적 성과와 성과 조정의 노력 수준보다 큽니까?

답변

0

멋진 기사를 찾았습니다. 기본적으로 단순한 애플리케이션에만 TPH를 사용하고보다 심각한 애플리케이션을 위해서는 다른 대안을 고려하십시오. Here is a great article about it 및 성능 조정 방법 TPT 매핑.

+1

흥미 롭습니다. 그리고 "엔티티 프레임 워크에서의 tpt-inheritance-the-performance-of-tpt-inheritance-mapping"에 대한 답은 무엇입니까? "Dapper로 수동 매핑"몇 가지 작업 항목이 투표 할 가치가 있습니다. https://entityframework.codeplex.com/workitem/1218 및 https://entityframework.codeplex.com/workitem/100 – Colin

1

모르테 Manavi는 얼마 전에 이것에 대해 블로그 게시물의 시리즈를 썼다 :

  1. Inheritance with EF Code First: Part 1 – Table per Hierarchy (TPH)합니다.
  2. Inheritance with EF Code First: Part 2 – Table per Type (TPT).
  3. Inheritance with EF Code First: Part 3 – Table per Concrete Type (TPC). 전에

    : 3 게시물의 끝에

, 그는 각 모델링 전략 및있는 단점이 상황의 유형 대신 다른 중 하나를 사용하고자 할 수있는 장점이 요약을 제공합니다 우리는이 토론에 참여하고, "모든 시나리오에 맞는 최상의 전략"이 존재하지 않는다는 점을 강조하고자합니다. 당신이 보았 듯이, 각각의 접근법에는 장점과 단점이 있습니다. 다음은 특정 시나리오에서 최선의 전략을 식별하는 엄지 손가락의 몇 가지 규칙은 다음과 같습니다

  • 다른 단어 -in TPC 대한 린 다형성 협회 나 쿼리를 필요로하지 않는 경우, 쿼리 결코 또는 드물게 경우 BillingDetails의 경우 BillingDetail 기본 클래스에 대한 연결이있는 클래스가 없습니다. 다형성이 일반적으로 필요하지 않은 클래스 계층 구조의 최상위 레벨에 대한 TPC (전용)를 권장하며 향후 기본 클래스의 수정이 어려울 수도 있습니다. 당신이 다형성 협회 나 쿼리를 필요로 할, 그리고 (서브 클래스 사이의 주요 차이점은 자신의 행동에 특히 경우) 서브 클래스가 상대적으로 적은 특성을 선언하면

  • TPH으로 의지. 귀하의 목표는 Nullable 컬럼의 수를 최소화하고 자신과 DBA에게 비정규 화 된 스키마가 장기적으로 문제를 일으키지 않는다는 것을 확신시키는 것입니다.

  • 다형성 연관 또는 쿼리가 필요하고 하위 클래스가 많은 속성 (하위 클래스는 주로 보유하는 데이터에 따라 다름)을 선언하는 경우 TPT으로 기울여야합니다. 또는 상속 계층 구조의 폭과 깊이 및 조인 대 노동 조합 비용에 따라 TPC을 사용하십시오.

기본적으로 간단한 문제의 경우에만 TPH를 선택하십시오. 더 복잡한 경우 (또는 Nullability 제약 조건과 정규화의 중요성을 주장하는 데이터 모델러에 의해 과장되면) TPT 전략을 고려해야합니다. 그러나이 시점에서 상속을 개체 모델에서 위임으로 개조하는 것이 더 좋지 않을 수 있는지 여부를 묻습니다 (위임은 상속과 같은 재사용을 위해 강력한 구성으로 만드는 방법 임). 지속성 또는 ORM과 관련없는 모든 종류의 이유로 복잡한 상속을 피하는 것이 가장 좋습니다. EF는 도메인과 관계형 모델 사이의 버퍼 역할을하지만 클래스를 설계 할 때 지속성 문제를 무시할 수있는 것은 아닙니다.