2013-03-21 3 views
3

나는 (적어도 노력)하고있어 나는 데이터베이스와 같은 나는 우리가 뭔가 의사 소통을 할 필요가 그렇게 할 때 내 .NET C# 프로젝트에서 Repository pattern을 구현하기 :외래 키

IList<Sole> soles = SoleService.All().ToList(); 

을 위의 쿼리를 사용하여 서비스에서 호출 한 메서드 이름은 모든 레코드를 Sole 테이블로 가져옵니다. 나는이 패턴을 구현하고, 내 서비스에서 너무 많은 사용자 정의 로직을 유지하기 위해 이것이 올바른 방법이라고 생각한다. 나가 의미하는 것은 단지 All() 방법을 유지하고 결과의 각 수정은 서비스 방법 이상으로하고자 한 ㄴ다는 것을이다.

현재 문제가 있습니다. 엔티티 Sole 및 엔티티 SoleColor이 있습니다. SoleColor에는 두 테이블 간의 관계를 만드는 외래 키 열 SoleID이 있습니다. 지금 두 엔티티 난 단지 All() 메서드를 호출 할 수 있습니다

var soleColors = SoleColorService.All(); 
var soles = SoleService.All(); 

을 그러나 여기 난 단지 SoleColor 엔티티와 관련된 Sole에서 해당 행을 선택하는 형태로 일부 사용자 정의가 필요합니다. 다시 말해 Sole의 행만 목록으로 끝납니다.SoleID 외래 키에서 Sole.ID가 외래 키로 발견 될 수 있습니다.

지금 당장은 약간 혼란 스럽습니다. 평범한 SQL 신택스를 사용한 지 오래되었습니다. 나는 이것이 SQL과 JOIN을 사용하여 쉽게 달성된다고 생각한다. LINQ 참여하고 그러나 나의 경험은 지금까지 내가 그 두 개의 쿼리가 필요하다고 알려줍니다 :

var soleColors = SoleColorService.All(); 
var soles = SoleService.All(); 

그리고 내가 필요한 결과 만 필터링/조합에 가입의 어떤 종류를 확인하십시오.

이런 종류의 상황에서 사용해야하는 도구가 내가 필요로하는 유일한 곳이 아니기 때문에 나는이 상황에서 스스로하고 당연히 그것을 배우는 법을 배우고 싶습니다.

from s in SoleService.All() 
join sc in SoleColorService.All() on s.ID equals sc.SoleID 
select s 

그러나 모두 저장소 경우에만 이렇게 같은 컨텍스트 인스턴스가 : 마지막 코멘트 후

+0

** ** ** LINQ to SQL 또는 Entity Framework를 사용하고 있습니까? 어쨌든, 당신이 알아 챘을 때, [IQueryable.Join] (http://msdn.microsoft.com/pl-pl/library/bb534644.aspx) 또는 [IEnumerable.Join] (http : // msdn .microsoft.com/pl-pl/library/system.linq.enumerable.join.aspx) 또는 EF를 사용하는 경우 탐색 속성을 사용하십시오. :) –

+0

미안하지만 나는 이것이 문제가되어야한다고 생각조차하지 못했습니다. 나는 ADO.NET EX - Code First 접근법을 사용하고있다. – Leron

+0

LINQ To SQL은 이전 버전 인 반면 엔티티 프레임 워크 (LINQ To Entities 사용)는 조금 더 새롭지 만 두 가지 모두 조금 다르게 작동합니다. –

답변

1

나는 이것이 당신이 찾고있는 무슨 생각합니다. 그렇지 않으면, 당신은 두 단계를 수행해야 :

var ids = SoleColorService.All().Select(sc => sc.SoleID).ToArray(); 
var soles = SoleService.All().Where(s => ids.Contains(s.ID)); 

I에 대한 정적 All() 방법하지만 좀 의심 해요. 그들은 나쁜 습관으로 간주되는 정적 컨텍스트를 사용하는 것을 제안합니다. 더욱이 협회에 대해 궁금합니다. 단어의 소리에 의해 나는 SoleColor, 즉 Sole이 SoleColorId FK를 갖도록 Sole을 가질 것으로 기대합니다.

+0

오류가 발생합니다. '값은 null이 될 수 없습니다.'- 볼 수 없는데도 정확히 null 값을 취합니다. 나는 두 예제를 모두 시도했다. – Leron

+0

이'SoleId' 중 어떤 것도 nullable입니까? –

+0

아니요 'long long'이 아니고 데이터베이스에 'NOT NULL'으로 표시되어 있다고 생각합니다. – Leron