当从SV应用程序中的域服务调用返回时,为什么我会收到具有null属性的对象?我使用LinqToEntitiesDomainService

时间:2011-10-06 11:36:01

标签: silverlight entity-framework wcf-ria-services

我正在从SV应用程序拨打域服务并等待接收IQueryable。在我的模型中,我与对象UserSession有一对一的关系。所以在linq查询中,我告诉我需要在UserSession上进行急切加载。

return (from u in this.ObjectContext.Users.Include("UserSession") where u.UserId == pUserID
    && u.UserSession != null select u).First<User>(); 
如果我正在访问myUser.UserSession,那么在服务中的方法内部我有UserSession对象,但是当我在Silverlight上收到此对象时,myUser.UserSession为null。为什么?有这种行为是正常的吗?我认为那不是;因为如果我不能使用它,为什么我会在EF中使用关系。糟糕的解决方法是拨打2个电话,一个用于用户,一个用于用户会话。

有人可以给我一个提示吗?谢谢。

1 个答案:

答案 0 :(得分:1)

最后,基于这篇博客,我找到了答案: http://madsdevblog.blogspot.com/2011/02/eager-loading-ef4-entities-with-ria.html

但简而言之,我试图加载User对象,为了在EF4中执行此操作,您必须执行以下步骤:


步骤I.禁用预先加载 “1.双击解决方案资源管理器中的.edmx文件 2.右键单击空白处的任意位置,然后单击“属性” 3.在属性窗口中,将“LazyLoadingEnabled”设置为false。 然后,您将在生成的文件中看到,将添加以下行:   this.ContextOptions.LazyLoadingEnabled = false; “


第二步。在linq查询中使用Include(我已经执行的步骤)


第三步。将[Include]属性添加到导航属性 “1.找到设置导航属性的部分 2.在[DataMember()]属性下添加[Include]作为属性 3.使用System.ServiceModel.DomainServices.Server添加;到模板中的使用部分。 4.保存并运行模板。 “