Entity Framework 4.0仅包含一些相关数据

时间:2012-08-09 03:57:33

标签: linq c#-4.0 entity-framework-4

我希望我的查询结果只包含一些已提交的数据。对于instatnce说我有每个销售的实体销售和物品有一个物品属性,这是特定销售的物品清单:

from s in myContext.Sales
select s;

返回包含所有项目的每个销售的所有销售额(当我导航到项目时,默认情况下LazyLoading处于启用状态)。但是我想只为每个销售包含特定项目 - 比如名称==“橙色”的项目,我仍然想要所有销售。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:4)

如果启用了延迟加载,它实际上会延迟加载您引用的内容。如果您不想启用它,请将其关闭。

myContext.Configuration.LazyLoadingEnabled = false;

您可以指定您希望在初始数据库往返中加载某些内容,以便不需要延迟加载。在那里,包含是你的朋友。

using System.Data.Entity; // You need this to get the lambda version of Include

from s in myContext.Sales.Include(s => s.PropertyA).Include(s => s.PropertyB)
select s;

请注意,您可以始终禁用特定属性的延迟加载,方法是不将其声明为虚拟。

我推荐以下博客以获得精彩概述

http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx

答案 1 :(得分:0)

我的回答是针对EF 4.0的,大部分来自这里:http://msdn.microsoft.com/en-us/library/bb896249.aspx

在访问导航属性时阻止LazyLoading加载所有内容:

myContext.Configuration.LazyLoadingEnabled = false;

加载项目:

List<Sale> sales = (from s in myContext.Sales
                    select s).ToList()

Foreach项目附加你想要的相关项目(获取一些项目的关键是CreateSourceQuery()方法):

foreach(Sale s in sales)
    s.Items.Attach(s.Items.CreateSourceQuery().Where(i => i.Name == "Orange"));