2013-04-18 4 views
1

내 asp.net 웹 사이트 프로젝트에서 DBContext를 extensivly 사용하고 있습니다. 내가 일반적으로하는 일은 페이지 클래스에서 사용할 수있는 dbcontext의 인스턴스를 가지고 페이지로드시 인스턴스를 생성하고 코드 전체에서 사용하는 것입니다. 그러나이를 처리하지는 않습니다. dbcontext를 처리하기 위해 페이지의 Pre_Render 이벤트를 사용하는 것이 현명 할 것입니다 (나는 그 시점에서 사용되었다고 가정합니다).페이지 렌더링 전에 내 DBContext 객체를 삭제하는 것이 현명한 방법입니까?

감사합니다.

솔루션은 그래서, 잘 작동하는 것 같다 나를 위해 내 dbcontext을 처리하는 내을 Dotnetnuke 모듈에 대한 약간의 확장 클래스를 작성 결국,하지만 난 단지 지금까지 몇 가지 모듈을 출시했다.

public class ModuleExt : PortalModuleBase 
{ 
    private BPEntities _ent; 
    public BPEntities ent 
    { 
     get{ 
      if (_ent == null) 
      { 
       _ent = new BPEntities(); 
      } 
      return _ent; 
     } 
    } 
    protected void Page_PreRender(object sender, EventArgs e) 
    { 
     ent.Dispose(); 
    } 
} 

이 그냥 사용을 앞서 천만 개체 (내 DBContext)를 가고 저를 활성화하고이를 사전 렌더링에 나를 위해 수행으로 폐기에 대해 걱정하지 않습니다.

+0

실제 해결책 인 경우 해결책을 실제로 답변으로 남겨두고 받아 들여야합니다. 질문과 답변은 별도로 작성되어야합니다. –

답변

3

당신이 원한다면 확실히 할 수 있지만, 한 가지 명심해야 할 것입니다 : 어느 시점에서, 당신이 필요로하는 그 객체로부터 자식 객체/콜렉션을 참조하고 싶다면 당신이 문맥을 처분하기 전에 그것이 수화되어 있는지 확인하십시오. 그렇지 않으면 컨텍스트가 이미 삭제되었음을 알리는 예외가 발생합니다.

일부 사람들은 응용 프로그램을 통해 단일 컨텍스트를 가지고 있다고 말하고, 그것은 분명 유효한 접근법이지만, 나는 현재 당신이하고있는 것을 훨씬 선호합니다. 나는 항상 데이터베이스 커넥션을 개방하는 것을 좋아하지 않는다.

+0

멋지다. 모든 클래스가 동일한 기본 클래스 (DotNetNuke 모듈로 작업 중)를 확장하므로 모듈 기본 클래스에 대한 빠른 확장 클래스를 작성했다 (위 참조) – box86rowh

관련 문제