在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");


许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因