是否可以根据导航属性ID进行限制?

时间:2013-07-31 17:59:14

标签: c# entity-framework entity-framework-4 lazy-loading

我的模型看起来像:

City
 CityBlocks
   Houses

因此,一个城市可以拥有许多城市街区,每个城市街区都可以拥有许多房屋。

在特定页面上,我有一个我想要显示的房屋ID列表。

该页面需要一个City对象,然后循环显示城市街区,然后显示房屋。

我害怕的一件事是,由于懒惰加载,即使我根据房屋ID列表加载东西,它也会因为延迟加载而显示所有城市街区和房屋。

如何避免此页面出现这种情况? (我在使用它时无法全局禁用延迟加载)。

更新

所以这就是我在做的事情:

var repository = new GenericRepository<Home>();
var homes = repository.Get(home => homeIdList.Contains(home.Id), 
                            includeProperties: "CityBlock, CityBlock.City")
                            .ToList();
City city = homes.Select(h => h.CityBlock.City).Distinct().FirstOrDefault();

但它不起作用。现在,当我在城市上空时,它会加载所有内容:

@foreach(var block in city.CityBlocks)
{
   foreach(var house in block.Houses)
   {

   }
}

1 个答案:

答案 0 :(得分:0)

对于您用于查询的特定上下文实例,禁用“本地”延迟加载:

var context = new MyContext();
context.Configuration.LazyLoadingEnabled = false;

仅对此上下文禁用它。您实例化的下一个上下文将再次启用延迟加载。

修改

它也适用于单个查询:

try
{
    context.Configuration.LazyLoadingEnabled = false;

    // run a query and materialize it here (with .ToList(), or .First(), etc.)
}
finally
{
    context.Configuration.LazyLoadingEnabled = true;
}