2009-05-20 3 views
6

새로운 애플 리케이션을 만드는 데 바빴다. 기본적으로 나는 데이터 액세스, 서비스 레이어 및 프리젠 테이션 레이어를 가지고있다 ... 모든 것이 훌륭하지만 EF에서 반환되는 엔티티 클래스를 사용하고있다. 문제는 내가 프레 젠 테이션 레이어에 이러한 엔티티 프레임 워크 참조/데이터 액세스를 프레 젠 테이션 레이어에 추가해야합니다 - 좋은 :리포지토리 패턴을 사용하여 Entity Framework에서 사용하기위한 Automapper?

그래서 내 생각은 다음과 일부 도움과 확인을 찾고 있었는데 때 고객의 권리 선 추락 ...

  1. 는 ..

  2. 을 고객과 같은 서비스 계층에서 클래스 세트를 만들기 프리젠 테이션 계층은 서비스 계층에 대한 참조를 가지고 있기 때문에 등 주문 엔터티가 dataccess에 반환됩니다. 엔터티 클래스 즉 고객을 서비스로 반환합니다. d는 내가 여기에 매핑을 할 것입니다 - 만약 내가 이것을 좋아한다면 확실하지 않습니까?

  3. 내가 서비스 계층에 배치하고 데이터 액세스 매핑을 수행하면 매핑에 사용되는 "표준 클래스"에 가장 적합한 장소가 될 것입니다. 그러면 Dataccess> 서비스로 순환 참조가 만들어지고 서비스> DATAACCESS는 .. - 그것은 DATAACCESS> 한 방향으로 만, 즉 서비스해야

내가 Automapper이 ( http://www.codeplex.com/AutoMapper) 내가 오른쪽 라인에 생각이 돌봐 사용하는 생각

??? 모든 아이디어 나 예제가 정말 감사하겠습니다.

내가 말한 것처럼 유일한 것은 데이터 서비스에서 (Iqueryable을 사용하여) 서비스 계층으로 돌아갈 때 엔티티 클래스에서 매핑하고 표준 컬렉션 클래스를 사용해야합니다.

이것이 내가 혼란 스럽다 고 생각합니다. 엔터티 클래스에 액세스 할 수 있도록 프레젠테이션 계층에서 엔터티 프레임 워크/dataaccess에 대한 참조가 필요하기 때문에 엔터티 클래스를 사용하는 것이 좋지 않다고 생각합니다.

답변

3

EF v1의 약점 중 하나에 부딪혔습니다. 당분간, AutoMapper를 사용하여 EF 엔티티를 "직선"사업체로 변환하고 상위 계층에서 사용할 수 있습니다.

또한 .NET 4.0/Visual Studio 2010으로 인해 EF v4를 사용하면 많은 문제 영역에서 많은 도움을 얻을 수 있습니다 - 직접 POCO (Plain Old CLR Objects)를 지원하고 많은 수의 더. EF Design Blog을 확인하십시오. 이 팀은 최근 EF v4와 관련하여 매우 흥미롭고 매우 유망한 여러 게시물을 올렸습니다. 나는 그것을 기대하고있어!

마크는

0
  1. 당신은 당신의 코어/공통 프로젝트에 자신의 인터페이스를 추출하는 경우 웹 프로젝트에서 EF 객체를 사용하고 웹 프로젝트가 사용하는, 저장소 또는 서비스에서 인터페이스 유형을 반환 할 수 있습니다.

    부분 클래스 고객 : 당신이 1 트릭을 할 수 있지만 ICustomer

  2. , 당신은 아마 어쨌든 automapper를 사용해야하는 매핑 당신은 EF 객체는 부분 클래스를 생성하고 바로 거기에 추가하여, 사용자 인터페이스를 구현할 수 있습니다 특정 뷰에 적합한 사용자 정의 ViewModel 객체에 대한 엔티티.저장소/서비스의 쿼리 메소드가 DTO/ViewModels를 직접 반환하도록 만들 수도 있습니다. 쿼리를보다 효율적으로 만들거나 (필요한 열만 쿼리하는 등) 추가 EF 매핑이 필요할 수 있습니다.