2014-12-10 4 views
1

내가 도메인 모델과 데이터 모델이 있습니다도메인 모델 매핑

  • 도메인 모델 (DOM) 비즈니스 계층이 작업을 단순화하기 위해 설계를.
  • 데이터 모델 (DaM)은 엔티티 프레임 워크를 사용하여 데이터베이스에서 자동으로 생성됩니다.

DoM <> 양방향으로 DaM을 매핑하고 싶습니다. 내가 Automapper을 시도,하지만 난 그것으로 하나의 큰 문제가 발생하고, 댐 데이터 모델

Car 
{ 
    Type {get; set;} 
    MaxSpeed {get; set;} 
} 

도메인 모델 DOM이 다음과 같은 구조 데이터베이스 테이블의 직접적인 번역 인 엔티티 자동차를 가지고 말 :

Car 
{ 
    MaxSpeed {get; set;} 
} 

SportsCar : Car 
{ 
} 

F1 : SportsCar 
{ 
} 

그리고 매핑해야합니다 :

if (DaM.Car(car).Type == Type.SportsCar) 
    DaM.Car.MaxSpeed > 350 ? map DaM.car to DoM.F1 : map DaM.car to DoM.SportsCar 

것을 보관하는 가장 좋은 방법/도구는 무엇입니까?

나는 automapper 또는 valueinject로 어떻게 할 수 있습니까?

+0

속성의 값에 따라 특정 유형에 매핑 할 수 없으며 이와 같이 데이터를 모델링해서는 안됩니다. 특성 값을 변경하면 오브젝트 유형을 변경해서는 안됩니다. –

+0

우리는 몇 가지 디자인을 고려해 봤습니다. 코드에 클래스 계층 구조가 있고 표준화 된 SQL 데이터 스키마가 있어야합니다. SQL에서 우리가 원하는 것을 수행하는 가장 간단한 방법은 타입 컬럼 (실제로는 하나의 컬럼보다 더 복잡합니다. 컬럼의 조합 + 참조 오브젝트의 유형)입니다. 매핑은 정적입니다. 즉, 데이터가 DaM에서 DoM으로 매핑 된 후에는 단순하거나 버려지고 새로 매핑 된 매핑 될 때까지 자체적으로 살아갑니다. – BanditoBunny

+0

discriminator 열/속성을 사용하여 올바른 파생 형식을 선택하는 EF에서 계층 당 상속 테이블을 사용하려고합니다. 그런 다음 앞뒤로 매핑 할 각 도메인 모델에 적합한 EF 모델을 갖게됩니다. http://msdn.microsoft.com/en-gb/data/jj618292.aspx –

답변

2

Entity Framework를 사용하여 테이블 당 계층 구조 매핑을 살펴 보았습니까? Discriminator로 Car의 Type 속성을 사용하면 SportsCar 및 F1 엔터티를 데이터 모델에 추가 할 수 있으며 Entity Framework는 데이터베이스에서 직접 검색 할 수 있습니다. 그런 다음 도메인 모델에 별도의 SportsCar 및 F1 클래스가 실제로 필요한 경우 AutoMapper를 사용할 수 있습니다. 이미 존재

a.InjectFrom(b); 

노트 a와 b : 그래서 이런 식으로 뭔가 될 것 기본적으로

http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph

+0

네, 이것이 갈 길입니다. –

1

valueinjecter에 관계없이 유형 의 대상으로 같은 이름과 소스 유형의 모든 속성과 일치합니다 , 당신은 사전에 그들을 생성합니다.

여기에 mvc 프로젝트에서 EF와 함께 사용되는 valueinjecter를 볼 수 있습니다 : http://prodinner.codeplex.com