linq - Entity Framework 3.5 - 如何加载子项

标签 linq entity-framework .net-3.5

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

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

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

Product

Product.ModifiedByUser (how to load this class, when loading product??)

Product.Category (how to load the categories when loading product?)

最佳答案

你可以急切加载:

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 服务中,确保在初始加载时返回所需的整个实体图非常重要。您不想在实体上调用 .Load() 之类的东西,因为这对服务器来说又是一个热点,这对性能不利。例如,如果您在 Silverlight 客户端中并从服务器请求实例列表并且它们的相关属性尚未具体化,则为时已晚。此外,Include 在 Silverlight 客户端中不起作用。因此,RIA Services 提供了服务器端工具,您可以使用它来确保最初返回正确的、完全具体化的对象图。

您需要做的是在 RIA 服务服务器中使用 IncludeAttribute。您可以创建一个“伙伴”元数据类来使用 [Include] 装饰您的实体模型。 the RIA Services overview document, section 4.8中有例子.

关于linq - Entity Framework 3.5 - 如何加载子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1374683/

相关文章:

c# - LINQ语法问题

linq - 为什么我们不能对 IQueryable<T> 类型的序列调用标准查询运算符?

entity-framework - 如何使用 Entity Framework 4 继承来确定实体的子类型?

.net - 3.5应用程序池下的ASP.NET 4.0应用

c# - 每组的 linq to sql 行数

c# - 如何针对 ListCollectionView 编写 linq 查询?

c# - 绑定(bind) UI 元素不通过 Itemsource 中的更改值刷新

c# - 如何在 Entity Framework 5 中表达 "has many through"关系?

LINQ 冲突检测 : Setting UpdateCheck attribute

c# - 为 Dictionary<string,List<string>> 中的多个 KeyValuePairs 计算 List<T> 中的项目总数