在LINQ to ADO.net数据服务查询中使用Expand有哪些替代方法?
-
05-07-2019 - |
题
我想知道在执行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);
Prefer(真的很喜欢,如果这样就加载了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加载子对象数据服务似乎有两种选择:
渴望加载
在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,您还可以使用包含方法 。您可以在声明之后但在执行之前将其应用于我,例如:
me = me.Include("MailingAddress");
不隶属于 StackOverflow