2014-11-14 82 views
-1

我正在研究Asp.Net MVC項目,並使用EF來訪問數據庫。由於某些原因,我無法首先使用代碼,所以我使用數據庫第一方法,並且lazyLoading在啓用時不起作用!懶加載不工作數據庫的第一種方法

public ActionResult ListAll() 
{ 
    List<Album> albums = new List<Album>(); 
    using (newsDBEntities context = new newsDBEntities()) 
    { 
     albums = context.Albums.ToList(); 
     return View(albums); 
    } 


    } 

和視圖
@foreach(project.Models.Album專輯型號) {

List<project.Models.Image> img = album.Images.Take(3).ToList(); 
    <div class="albumHolder"> 
    @foreach (var item in img) 
    { 
     <div class="imageHolder"> 
     <img src ="@item.imageURL" width="200px" height="200px" /> 
     </div> 
    } 
    <p class="albumP">@album.albumName</p> 
    </div> 
} 
<div></div> 
</div> 

:比如我不能處置的DbContext後做類似下面的代碼的一些事情在下面的例外情況中,我試圖在視圖中使用3個模型元素:

ObjectContext實例已被處置,不能再用於需要連接的操作灰。

我想知道爲什麼它不應該加載圖像,而啓用延遲加載。我也想知道爲什麼它可以在控制檯應用程序中執行類似的代碼時起作用!

+0

當處理上下文時,不再有與​​數據庫的連接。那麼延遲加載如何加載導航屬性而不連接到數據庫呢? – 2014-11-14 23:01:06

+0

這是正確的,但我用.toList(),應強制EF tu執行查詢,然後專輯應該是一個局部變量 – 2014-11-14 23:05:16

+0

你的'相冊'是本地的,但你的'圖像'不是本地... – 2014-11-14 23:09:06

回答

3

修訂ANSWER

OK,看來你正在試圖做延遲加載的看法,我認爲這是行不通的。相反,我認爲你應該確保在視圖中你需要的所有數據都被加載到控制器中。在你的情況下,我認爲你需要包含圖像細節數據。嘗試將控制器中的代碼更改爲

// At the top of your class code: 
using System.Data.Entity; 

// And then inside the using clause: 

albums = context.Albums.Include(x => x.Images).ToList(); 

這將確保專輯的圖像在視圖中可用,因此不需要延遲加載。

+0

我知道這會起作用,但實際上在實際的代碼中,我將相冊傳遞給視圖,然後在視圖中嘗試拍攝3張專輯的元素,然後我得到異常,我希望所有圖像都可以加載到專輯中,這樣我就可以使用他們沒有數據庫連接 – 2014-11-14 23:17:22

+0

我編輯我的問題,這是我想要做的實際事情 – 2014-11-14 23:25:38

+0

我不知道包括存在......多數民衆贊成真棒。 – misterManager 2014-11-15 03:30:19

相關問題