Silverlight 使用EF4和RIA服务连接两个表并返回整个结果

Silverlight 使用EF4和RIA服务连接两个表并返回整个结果,silverlight,entity-framework-4,ria,wcf-ria-services,Silverlight,Entity Framework 4,Ria,Wcf Ria Services,我正在使用RIA服务和entity framework 4.0构建Silverlight应用程序。我的SQL数据库中有两个表,我希望将它们作为一个结果连接并返回。首先,我的两张桌子: 我的默认域服务生成了默认的GetRooms方法: Public Function GetRooms() As IQueryable(Of Room) Return Me.ObjectContext.Rooms End Function 尽管Room.BuildingId和Building.Id之间存在

我正在使用RIA服务和entity framework 4.0构建Silverlight应用程序。我的SQL数据库中有两个表,我希望将它们作为一个结果连接并返回。首先,我的两张桌子:



我的默认域服务生成了默认的GetRooms方法:

Public Function GetRooms() As IQueryable(Of Room)
    Return Me.ObjectContext.Rooms
End Function

尽管Room.BuildingId和Building.Id之间存在引用完整性,但这似乎并不包含有关我的建筑物的详细信息。有人能给我指出正确的方向吗?

到optimice性能相关的表默认不包括在查询中。您需要用[include]标记要包含在查询中的表。此外,您需要在查询中包含该表。Tim Heuer阅读了一篇关于如何做到这一点的博客:


默认情况下,查询中不包括与optimice性能相关的表。您需要用[include]标记要包含在查询中的表。此外,您需要在查询中包含该表。Tim Heuer阅读了一篇关于如何做到这一点的博客:


如果您想将建筑物包括在内,您需要在代码中使用
.Include(“建筑物”)

Public Function GetRooms() As IQueryable(Of Room)
    Return Me.ObjectContext.Rooms.Include("Building")
End Function

如果希望包含建筑物,则需要在代码中使用
.Include(“Building”)

Public Function GetRooms() As IQueryable(Of Room)
    Return Me.ObjectContext.Rooms.Include("Building")
End Function

根据您的需求,您可能需要考虑返回一组“演示模型”对象(每个对象包含关于房间和建筑物的信息),而不是实体。在服务器项目中定义一个类,并使用域操作(传递给客户端)中实体模型的数据填充此类型的对象集合。更多关于这样做的信息如下:

< P>根据您的需求,您可能需要考虑返回一组“演示模型”对象(每个对象包含关于房间和建筑物的信息),而不是实体。在服务器项目中定义一个类,并使用域操作(传递给客户端)中实体模型的数据填充此类型的对象集合。有关执行此操作的更多信息,请参见:。

iteself的这一操作并没有解决问题,但在使用[Include]属性装饰实体框架元数据文件中的Building属性后,值开始出现。你知道为什么我还需要包含[include]属性吗?我喜欢在没有任何属性装饰的情况下在代码中控制它。@Matt Ruwe-这被称为渴望加载,在英语中的意思是:当你去拿一个房间时,也去拿相关的建筑。与惰性加载相反,惰性加载在英语中的意思是:当您枚举一个房间并请求建筑关联时,访问DB并获取它。我个人禁用延迟加载,因为我希望完全控制db往返。大多数开发人员也这样做。iteself的这一做法并没有解决问题,但在实体框架元数据文件中使用[Include]属性修饰Building属性后,值开始出现。你知道为什么我还需要包含[include]属性吗?我喜欢在没有任何属性装饰的情况下在代码中控制它。@Matt Ruwe-这被称为渴望加载,在英语中的意思是:当你去拿一个房间时,也去拿相关的建筑。与惰性加载相反,惰性加载在英语中的意思是:当您枚举一个房间并请求建筑关联时,访问DB并获取它。我个人禁用延迟加载,因为我希望完全控制db往返。大多数开发人员也这样做。急切地加载您需要的内容。我实际上尝试了这种方法,它看起来很有效,但当我想将信息保存回数据库时,它最终创建了新的文件室并构建了对象,而不是使用数据库中已有的行。使用这种方法,您必须在域服务中提供您自己的更新逻辑-您可能在LINQ to Entities查询中有一些错误的逻辑。我实际上尝试了这种方法,它似乎有效,但当我想将信息保存回数据库时,它最终创建了新的文件室并构建了对象,而不是使用数据库中已有的行。使用此方法,您必须在域服务中提供自己的更新逻辑-您的LINQ to Entities查询中可能存在一些错误的逻辑。仅此一点并不能解决问题。我还需要按照Shawn的建议,在ObjectContext.Rooms的末尾添加.Include(“Building”)函数。知道为什么需要这样做吗?是的,您需要在查询中使用Include语句。并非总是希望在查询中包含相关表(由于性能原因),因此需要在查询中指定相关表。仅此一点并不能解决问题。我还需要按照Shawn的建议,在ObjectContext.Rooms的末尾添加.Include(“Building”)函数。知道为什么需要这样做吗?是的,您需要在查询中使用Include语句。并非总是希望在查询中包含相关表(由于性能原因),因此需要在查询中指定相关表。
Public Function GetRooms() As IQueryable(Of Room)
    Return Me.ObjectContext.Rooms.Include("Building")
End Function