2013-10-24 2 views
1
여기

는 샘플 스키마 인 "=" ""일대 다 "관계를 나타낸다 :

계약 => ContractCustomers을
계약 => ContractDiscounts
고객 => ContractCustomers
DiscountType => ContractDiscounts

나는 하나의 서버 호출을 사용하여 관련된 모든 세부 사항과 함께 계약 오브젝트를 검색하려고한다.관련된 모든 정보와 함께 LINQ 개체를 검색하는 방법은 무엇입니까?

using (Data.ABWXDataContext db = new Data.ABWXDataContext()) 
      { 
       DataLoadOptions options = new DataLoadOptions(); 
       options.LoadWith<Data.Contract>(c => c.ContractCustomers); 
       options.LoadWith<Data.Contract>(c => c.ContractDiscounts); 
       options.LoadWith<Data.ContractDiscount>(c => c.DiscountType); 
       options.LoadWith<Data.ContractCustomer>(c => c.Customers); 
       db.LoadOptions = options; 
       var Contract = from con in db.Contracts 
           where con.ContractId == contractId 
           select con; 
       return Contract.ToList(); 
      } 
     } 

위의 코드는 ContractDiscounts 및 ContractCustomers 테이블을 포함하도록 잘 작동 :

지금까지 내가 LoadWith을 사용했다. 그러나 그것은 (할인 유형, 고객)에 대한 액세스를 제공하지 않습니다. 나는 그들이 계약의 자녀가 아니라는 것을 알고 있습니다. 어떻게 그 계약 대상과 동행 할 수 있습니까?

간단한 일반적인 작업 인 경우 사과드립니다.

+0

= db.Contracts .Where (c => c.ContractId == contractId;'메소드가'IQueryable'를 리턴하도록 내버려 두지 만 문제가 해결되지 않을 것이라고 생각합니다.) 클래스에 대한 메타 데이터 정의를 게시 할 수 있습니까? – ChrisF

+0

알아요, 당신이 많이 도움이 안되지만 좀 더 복잡한 쿼리에 관해서는 조금 잃어 버렸지 만'JOIN'을 사용하면 효과가있는 것처럼 보입니다. 구문에 대해서는 잘 모르겠지만 JOIN을 포함 시키려고 시도 했습니까? 검색어? – Leron

+0

http://msdn.microsoft.com/en-us/library/bb5 34268 (v = vs.110) .aspx # remarks 토글은 할 수없는 것처럼 보입니다. 그러나 Entity Framework에서 가능합니다. 능동적 인 개발이 이루어 졌다면 대신이를 사용하는 것을 고려하십시오. – Aron

답변

0

당신은하지 Contract에서 시작로드 옵션을 추가 할 수 있습니다 많은로드 옵션을 추가하는 것은 여러 쿼리를 일으킬 수 있습니다

options.LoadWith<Data.ContractCustomer>(c => c.Customer); 
options.LoadWith<Data.ContractDiscount>(c => c.Discount); 

참고 해고 할 (1 개 + N 문제). 여전히 효율적인 지 여부를 확인해야합니다. 나중에 필요할 때 관련 데이터를 쿼리하는 것이 더 효율적일 수 있습니다.

0

I found the answer on this question to work for me

복사 답 : 나는 그것이 무엇인지 발견

! Linq to SQL은 Child Records에는 [DataMember()] 속성을 넣을 것이지만 부모는 안됩니다. 연결 아래에 [DataMember()] 특성을 추가해야했습니다.

다운 사이드가 DBML가 :-(변경되면이 덮어 얻을 것이다 context.designer.cs에 직접 입력입니다

[Association(Name="CustomerStatus_Customer", Storage="_CustomerStatus", ThisKey="CustomerStatusId", OtherKey="CustomerStatusId", IsForeignKey=true)] 
[DataMember()] 
public CustomerStatus CustomerStatus 
{ 
    get 
    { 
     return this._CustomerStatus.Entity; 
    } 
    set 
    { 
     ... 
    } 
} 
내가 VAR 계약`가고 싶어
+0

이것은 부작용이 없다고 확신합니까? (예를 들어, 순환 참조 또는 원할 때 열망하는로드.) 수동으로 dbml을 변경하는 것은 큰 관심사입니다. 내가 제안한 것을 시도 했니? –

관련 문제