문제

LINQ에서 ADO.NET 데이터 서비스 쿼리를 수행 할 때 확장 키워드를 사용하는 대안이 있는지 궁금합니다. 확장 방법을 사용하면 내가 관심있는 데이터를 얻을 수 있지만 사전에 작업 할 하위 객체를 모두 알아야합니다. 저의 절대적인 선호는 그 하위 객체가 내가 액세스 할 때 게으른로드 될 것이지만, 이것은 옵션이 아닌 것처럼 보입니다 (이 게으른로드를 해당 하위 객체 속성에 추가 할 수는 있지만, 그것은 그 하위 객체 속성에 추가 할 수 있습니다. 데이터 서비스 참조를 업데이트 할 때 삭제됩니다).

이 상황에 대한 제안/모범 사례/대안이 있습니까? 감사.

===== MailingAddress가있는 멤버를 사용한 코드 예제 =====

공장:

var me = (from m in ctx.Member.Expand("MailingAddress")
          where m.MemberID == 10000
          select m).First();
MessageBox.Show(me.MailingAddress.Street);

선호 할 것입니다 (이것이 정말로 원할 것입니다.

var me = (from m in ctx.Member
          where m.MemberID == 10000
          select m).First();
MessageBox.Show(me.MailingAddress.Street);

또는 적어도 (참고 : MailingAddressReference와 함께 이와 유사한 것은 서비스 작업의 엔티티에서 LINQ로서 그렇게하면 서버 측에서 작동합니다).

var me = (from m in ctx.Member
          where m.MemberID == 10000
          select m).First();
if (!(me.MailingAddress.IsLoaded())) me.MailingAddress.Load()
MessageBox.Show(me.MailingAddress.Street);
도움이 되었습니까?

해결책

ADO.NET 데이터 서비스를 통해 하위 객체로드하는 것은 두 가지 선택이있는 것 같습니다.

열렬한 적재

LINQ에서 데이터 서비스 예제에서 .expand ( [membervariabelename])에 의해 달성

var me = (from m in ctx.Member.Expand("MailingAddress")          
         where m.MemberID == 10000          
         select m).First();
MessageBox.Show(me.MailingAddress.Street);

게으른 하중

컨텍스트에서 .loadProperty를 호출하여 변수와 게으른로드 해야하는 속성을 전달하여 달성합니다.

var me = (from m in ctx.Member          
          where m.MemberID == 10000          
          select m).First();
ctx.LoadProperty(myMember, "MailingAddresses");
MessageBox.Show(me.MailingAddress.Street);

다른 팁

LINQ에서 엔티티를 사용하면 사용할 수도 있습니다 방법을 포함하십시오. 선언 된 후에는 이것을 나에게 적용 할 수 있지만 실행되기 전에 : 예를 들어 :

me = me.Include("MailingAddress");
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top