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

发布于 2024-12-08 04:39:29 字数 522 浏览 0 评论 0原文

我正在从 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 次调用,一次用于用户,一次用于用户会话。

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

i am making a call from SV app to a domain service and waiting to receive IQueryable. In my model i have an one to one relationship with the object UserSession. So in the linq query i am telling that i need an eager loading on UserSession.

return (from u in this.ObjectContext.Users.Include("UserSession") where u.UserId == pUserID
    && u.UserSession != null select u).First<User>(); 

inside the method in the service if i am accessing myUser.UserSession i have the UserSession object but when i receive this object on the Silverlight the myUser.UserSession is null. Why ? It is normal to have this behavior ? I am thinking that is not; because why else i would use relations in EF if i can not use them. On bad workaround is to make 2 calls, one for the user and one for the user session.

Can somebody give me a hint? thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

温柔嚣张 2024-12-15 04:39:29

最后我通过这个博客找到了答案:
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;
"


步骤 II. 在 linq 查询中使用 Include (我已经执行的步骤)


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

Finaly i found an answer thanks to this blog:
http://madsdevblog.blogspot.com/2011/02/eager-loading-ef4-entities-with-ria.html.

But for short i was trying to eager load the the User object and in order to do that in EF4 you must do these steps:


Step I. Disable eager loading
"1. Double click on your .edmx file in the solution explorer
2. Right click anywhere in the white space and click "Properties"
3. In the properties window, set "LazyLoadingEnabled" to false.
You will then see that in the generated file, the following line will be added:
this.ContextOptions.LazyLoadingEnabled = false;
"


Step II. Use Include in the linq query (step which i already do)


Step III. Add the [Include] attribute to the navigation properties
"1. Locate the section where Navigation Properties are set
2. Add [Include] as an attribute beneath the [DataMember()] attribute
3. Add using System.ServiceModel.DomainServices.Server; to the using section in the template.
4. Save and run the template.
"

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文