2013-07-31 60 views
0

我的模型看起來像:是否可以根據導航屬性ID進行限制?

City 
CityBlocks 
    Houses 

因此,一個城市可以有很多的城市街區,每個街區可以有很多的房子。

在特定頁面上,我有一個我想要顯示的房屋編號的列表。

頁面需要一個City對象,然後循環顯示城市街區,然後顯示房屋。

我擔心的一件事是,由於延遲加載,即使我根據房屋編號列表加載東西,它會顯示所有城市街區和房屋,因爲延遲加載。

如何避免此頁面的這種情況? (當我使用它時,我無法在全局禁用延遲加載)。

更新

所以這是我在做什麼:

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) 
    { 

    } 
} 
+0

它會正常工作 – qujck

回答

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; 
} 
+0

我使用這個作爲基礎(庫模式與工作單位):HTTP ://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc應用程序如何使用此設置執行此操作? – loyalflow

+0

@ user1361315:將參數傳遞給上下文或工作單元構造函數或設置屬性或類似的東西。我真的不想讀20頁找到最好的地方。如果你熟悉那個教程,你應該能夠弄明白。 – Slauma

+0

的問題,所以從這一點起的整個請求將會有延遲加載關閉然後正確?我希望你能以某種方式做一次電話。 – loyalflow

相關問題