2009-08-22 3 views
1

:일반 저장소 Linq2Sql과 API의 모습은 다음과 어디 저장소 패턴 일하고 임피던스 불일치 문제

방문자가 도메인 개체이고 X이 도메인 객체를 나타내는
var visitor = repository.Find(x => x.EmailAddress == credentials.EmailAddress && 
           x.Password == credentials.Password); 

. 저장소에 Find 메서드의 메소드 서명은 다음과 같습니다

을 : 내가 linq2sql는 자신의 객체를 생성하기 때문에 Linq2Sql 이것을 사용하려고 시도 할 때까지 그 결과로 내가 전화를 할 때

T Find(Func<T, bool> query); 

이 모두 훌륭합니다 linq2sql이가 ​​만든 타입이 아니라 내가 전달하고 함수의 기능을 기대하기 때문에

context.visitors.FirstOrDefault(query); 

유형이 일치하지 않습니다 당신이 당신의 Find 서명을 변경해야합니다으로

답변

1

글쎄 시작 :.

T Find(Expression<Func<T, bool>> query); 

LINQ to SQL은 일반 대리자 대신 논리를 식 트리로 사용해야하며 그렇지 않으면 SQL로 변환하는 방법을 사용할 수 없습니다.

그 외에도, 나는 당신이 저장소와 LINQ to SQL에 동일한 도메인 클래스를 사용하지 않는 것처럼 들리므로 두려운 것이 아닙니다. 그게 맞습니까? 그것은 잠재적 인 문제처럼 들립니다. 적어도 그것은 인생을 꽤 까다롭게 만들 것입니다.

+0

예 ... 내 도메인 개체에 동작을 추가 할 수 있기 때문에 Linq2SQL 클래스를 내 도메인 개체로 사용하고 싶지 않고 구성원의 액세스 가능성을 제한하고자 할 수도 있습니다. –

+0

동작을 추가하는 것은 쉽습니다. 생성 된 클래스는 * 부분 클래스 *입니다. 즉, 동일한 클래스에 있지만 별도의 파일에 고유 한 비헤이비어를 추가 할 수 있습니다. dbml 파일에서 속성 접근성을 지정할 수 있습니다. –

+0

그 certianly 하나의 유형에서 표현의 나무를 다른 유형으로 변환하는 것보다 훨씬 간단한 접근법처럼 보인다. 이러한 접근 방식을 사용하고 인터페이스를 통해 가시성과 액세스를 제한 할 것입니다. –