2014-11-14 2 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 인스턴스가 삭제되었으며 connec이 필요한 작업에 더 이상 사용할 수 없습니다 .

왜 게으른 로딩을 사용하는 동안 이미지를로드해서는 안되는 지 궁금합니다. 콘솔 응용 프로그램에서 비슷한 코드를 수행 할 때 왜 작동하는지 궁금합니다.

+0

컨텍스트가 삭제되면 더 이상 데이터베이스에 연결되지 않습니다. 그렇다면 게으른로드가 데이터베이스에 연결하지 않고 탐색 속성을로드하는 방법은 무엇입니까? –

+0

맞아요.하지만 EF tu가 쿼리를 실행해야하는 .toList()를 사용하면 앨범이 로컬 변수가됩니다 –

+0

'앨범 '은 로컬이지만'이미지 '는 로컬이 아닙니다 ... –

답변

3

업데이트] 답변

확인, 당신이 내가 작동하지 않습니다 생각보기에 게으른 로딩을하려고하는 것 같다. 대신 뷰에 필요한 모든 데이터가 컨트롤러에로드되어 있는지 확인해야한다고 생각합니다. 귀하의 경우에는 이미지 세부 정보 데이터를 포함해야한다고 생각합니다. 이 앨범의 이미지,보기에 따라서 더 게으른 로딩이 필요하지 않습니다 사용할 수 있는지 확인합니다

// 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 요소를 가져와 예외를 얻으려고합니다. 모든 이미지를 앨범에로드하여 사용할 수있게합니다. 그들과 데이터베이스에 연결하지 않고 –

+0

내가 뭘 하려는지 실제 질문이 내 질문을 편집했습니다 –

+0

난 몰랐어 포함 ... 그게 끝내. – misterManager

관련 문제