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)
通过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)
| 归档时间: |
|
| 查看次数: |
8622 次 |
| 最近记录: |