LINQ에서 ADO.NET 데이터 서비스 쿼리에서 확장을 사용하는 대안은 무엇입니까?
-
05-07-2019 - |
문제
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");