LINQ to ADO.netデータサービスクエリでExpandを使用する代わりになるものは何ですか?

entity-framework lazy-loading linq wcf-data-services

質問

LINQ to ADO.net Data Servicesクエリを実行するときにExpandキーワードを使用することに代わるものがあるかどうか私は疑問に思います。 expandメソッドは私が興味を持っているデータを取得することはできませんが、それは私が事前に作業しようとしていることになるすべてのサブオブジェクトを知る必要があります。私の絶対的な好みは、それらにアクセスしたときにそれらのサブオブジェクトが私のために遅延ロードされることでしょうが、これはオプションには思えませんデータサービスの参照を更新すると、消去されます。

誰かがこの状況に対して何か提案/ベストプラクティス/代替案を持っていますか?ありがとう。

===== MailingAddressを持つMemberを使用したコード例=====

作品:

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

優先しますか(これが、その後MailingAddressをロードしてロードしたかどうかを確認します)。

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 Data Servicesを介したサブオブジェクトのロードには2つの選択肢があります。

熱心なロード

LINQ to Data Servicesの例の.Expand( "[MemberVariableName]")によって達成される

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 to Entitiesでは、 Includeメソッドも使用できます 。宣言してから実行するまでの間に、これを私に適用することができます。

me = me.Include("MailingAddress");


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ