在LINQ to ADO.net数据服务查询中使用Expand有哪些替代方法?

Chr*_*Dog 5 linq entity-framework lazy-loading 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);
Run Code Online (Sandbox Code Playgroud)

会不会喜欢(真的很想,如果然后去了并加载了MailingAddress)

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

或者至少(注意:类似于此,使用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);
Run Code Online (Sandbox Code Playgroud)

Chr*_*Dog 9

通过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);
Run Code Online (Sandbox Code Playgroud)

延迟加载

通过在上下文中调用.LoadProperty并传递变量和应该延迟加载的属性来完成.

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