Visual Studio 2010에서 OR 디자이너를 사용하여 맨 위에 데이터베이스 (SQL Server 2008 Express)를 만들고 LINQ to SQL 엔티티 (LINQEntitiesDataContext)를 만들었습니다. 그런 다음 리포지토리 클래스 및 관련 IRepository 인터페이스를 제공하며, 데이터 엔티티에 의미있는 액세스를 제공하는 간단하고 유용한 CRUD 메소드가 포함되어 있습니다.OData를 리포지토리 패턴과 함께 사용
IQueryable<User> QueryUsersByType(UserTypeEnum userType)
다른 :
void CreateUserWithDefaultType(User user)
가 지금은 "와이어를 통해"가능한이 저장소를 만들고 액세스를 제공하기 위해 WCF 데이터 서비스 (하나로, OData)을 사용하고자 할 예를 들어, 방법이 있어요 . 그러나 내가 본 OData의 모든 예는 데이터 엔티티 클래스가 IUpdatable을 구현하도록 만든 다음이 데이터 컨텍스트 클래스를 참조하는 WCF 데이터 서비스를 생성하여 엔티티 자체 (예 : Users 엔티티)에 대한 직접 액세스를 제공합니다. 필자의 경우, 이는 LinqEntitiesDataContext를 IUpdatable로 만들고 서비스 유형으로 사용하는 것을 의미합니다. 이는 Repository 클래스 사용을 완전히 피할 수 있습니다.
은 내가 데이터 서비스 내 저장소 노출 할 필요가 느낌 얻을 : 기존 업데이트 방법에 대한 호출을 방지
DataService<Repository> // *Not* DataService<LinqEntitiesDataContext>
을하지만 내 저장소가 IUpdatable 구현 확인해야합니다 (예 : CreateUserWithDefaultType)
여기서 내가 무엇을 놓치고 있습니까? 엔티티 레이어가 아닌 리포지토리 레이어를 노출하는이 방법을 사용하는 좋은 예가 있습니까?
흠, 그러니까 내 데이터 모델에 좋은 깨끗한 인터페이스를 단 한번 구현할 수 없으며 서비스 소비자에게 혜택을 줄 수 있습니다. 대신 비즈니스 로직 계층의 각 구성 요소는 필터를 적용하고, 외래 키를 확장하고, 페이징을 구현하는 등 엔터티 수준에서 작업해야합니다. 서비스 운영을 통해 원하는대로 할 수 있습니까? 엉망?! – MarkH
당신이하고 싶은 일 중 일부는 분명히 서버 측에서 할 수 있습니다. EF 공급자와 작업하는 경우 페이징은 서버 측에서는 쉽지 않습니다. 그렇지 않으면 너무 어렵지 않습니다. 필터를 미리 적용하고 외래 키를 확장하는 것이 가능합니다. 바로 가기 위해 더 열심히 노력해야 할 수도 있습니다. Service Ops는 당신이 원하는 모든 것을 할 수는 있지만 엉망이 될 수 있습니다. 이야기의 도덕 : 우리는 공공 공급자의 우선 순위를 정해야합니다. –
좋아, 내가 듣고 싶지 않았지만 의견을 보내 주셔서 감사합니다. 다른 방법으로 청구서에 부합하는대로 OData를 아키텍처 계층 간 인터페이스로 활용 해 보겠습니다. – MarkH