实体框架3.5 - 如何加载子项

.net-3.5 entity-framework linq

我的问题可能很简单,你如何加载子/子类。没有“负载”或类似的东西,我可以找到上下文加载孩子。

上下文类是ObjectContext类型,见下文:

public partial class RTIPricingEntities : global::System.Data.Objects.ObjectContext

产品

Product.ModifiedByUser(加载产品时如何加载这个类??)

Product.Category(加载产品时如何加载类别?)

热门答案

你可以急切加载:

var q = from p in Context.Products
                  .Include("ModifiedByUser")
                  .Include("Category")
        select p;

......或项目:

var q = from p in Context.Products
        select new 
        {
           Id = p.Id,
           Name = p.Name
           ModifiedByUserName = p.ModifiedByUser.Name,
           CategoryName = p.Category.Name
        }

投影的优点是您只获得所需的数据,而不是每个被引用的实体。急切加载的优点是返回的实体确实改变了跟踪。为手头的问题选择合适的技术。

更新

是的,重要的要提到您正在使用RIA服务。我认为你也在客户中工作。这使事情完全不同。

在RIA Services中,确保在初始加载时返回所需实体的整个图表非常重要。您不希望在实体上调用类似.Load()的内容,因为这对服务器来说是另一个热点,这对性能不利。例如,如果您位于Silverlight客户端并从服务器请求实例列表并且它们的相关属性尚未实现,则已为时已晚。此外,Include将无法在Silverlight客户端中运行。因此,RIA Services具有服务器端工具,您可以使用它们来确保最初返回正确的,完全物化的对象图。

您需要做的是在RIA Services服务器中使用IncludeAttribute。您可以使用[Include]创建“伙伴”元数据类来装饰您的实体模型。 RIA服务概述文档的第4.8节中有一些示例。




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因