在LINQ to ADO.net數據服務查詢中使用Expand有哪些替代方法?

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

我想知道在執行LINQ to ADO.net數據服務查詢時是否有使用Expand關鍵字的替代方法。 expand方法確實為我提供了我感興趣的數據,但是它要求我知道我將要提前使用的所有子對象。我絕對的偏好是,當我訪問它們時,這些子對象將被延遲加載,但這看起來不是一個選項(我可以將這個延遲加載添加到該子對象屬性的get,但它當我更新數據服務引用時會被刪除)。

有沒有人對這種情況有任何建議/最佳做法/替代方案?謝謝。

=====使用具有MailingAddress的成員的示例代碼=====

作品:

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 to Entities,則在服務器端工作)

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加載子對像似乎有兩種選擇:

渴望加載

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合法嗎? 是的,了解原因