2014-11-11 7 views
0

"Dispose 후 DataContext 액세스"오류가 발생하지만 aspx 및 ascx 페이지/컨트롤에서만 오류가 발생합니다. datacontext를 사용하는 페이지에서 메소드를 인라인으로 호출해서는 안된다는 일반적인 규칙이 있습니까?렌더 페이지/컨트롤에서 Dispose 후 DataContext에 액세스

페이지가 렌더링되고 메서드를 호출 할 때 datacontext가 이미 삭제되었다고 생각합니까?

default.aspx에에

<%= CurrentContent.GetText("Intro") %> 

CurrentContent 데이터베이스 객체가이

using (MyDbContext ctx = new MyDbContext()) 
{ 
    return from r in ctx.Table select r; 
} 

이연 실행처럼 사용하고 무슨 일이 일어나고 있는지되었다고 가정하여 default.aspx.cs

답변

1

에 언급 실제로 당신. 이 쿼리는 바로 실행되지 않고 반환 된 열거자를 마지막으로 사용할 때만 실행됩니다.이 경우 사용중인 블록이 컨텍스트를 삭제 한 후입니다. 이 문제가 발생하지 않도록하려면 쿼리 패턴을

using (MyDbContext ctx = new MyDbContext()) 
{ 
    return (from r in ctx.Table select r).ToList(); 
} 

으로 변경하거나 처리 방법을 변경하십시오. 나는 당신의 경우에 ASP.NET Page 객체가 될 객체를 둘러싸는 객체에 내 컨텍스트의 수명을 매기는 경향이있다. 컨텍스트를 멤버 변수로 만들고 페이지에서 처리합니다.

+0

감사합니다. wyz. 당신이 그것을 목록으로 만들지 만 그것을 사용하는 진술과 함께 고려해야하는지 궁금합니다. 반가워요. 이것은 일반적인 디자인 재 지그와 함께 문제를 해결 한 것으로 보입니다. –