2012-04-13 3 views
1

나는 사이의 차이 ...DbContext와 함께 using 문을 사용하는 것과 사용하지 않는 것의 차이점은 무엇입니까?

using (var db = new PteDotNetContext()) 
      { 
       var blog = new Blog() { BlogType = 1, Title = "Blog 1", Description = TestInfo.UniqueRecordIdentifier, DateAdded = DateTime.Now, User = TestInfo.UniqueRecordIdentifier }; 
       db.Blogs.Add(blog); 
       db.SaveChanges(); 
      } 


      PteDotNetContext context2 = new PteDotNetContext(); 
      var blog2 = new Blog() { BlogType = 1, Title = "Blog 2", Description = TestInfo.UniqueRecordIdentifier, DateAdded = DateTime.Now, User = TestInfo.UniqueRecordIdentifier }; 
      context2.Blogs.Add(blog2); 
      context2.SaveChanges(); 

가 무엇인지 궁금하네요. using 문을 사용하면 기본적으로 객체의 소멸자가 호출된다는 것을 이해합니다. 그냥 궁금해 ...

a) using 문을 열고 DbContext에서 Sql 연결을 닫습니까? b) 두 번째 진술을 실제로 열어 본 것이 아니기 때문에 두 번째 진술은 어떻게됩니까? 그러면 언제 진술을 닫을 수 있습니까?

+1

'IDisposable'을 다시 조사해야합니다. –

+0

그리고 "C# using"을 검색하십시오. 그러나 이것은 약간 더 복잡한 질문 일 수 있습니다. 예를 들어, * LINQ2SQL *에서 Dispose는 * 연결되지 않은 * 경우에만 연결을 종료합니다 *. 나는 EF에 대해 확신하지 못한다. (따라서'사용 '에 대한 * 일반 응답에 유의하십시오!) –

답변

3

a) using 문을 열고 DbContext 에서 Sql 연결을 닫습니까?

using 안에 선언 된 변수는 블록 사용이 끝나면 폐기됩니다. DbContext에서 처리 메소드는 연결을 닫으므로 해당 코드 블록이 종료되면 연결이 닫힙니다.

B) 만약 내가 실제로 그것을 열어 결코 하고 여전히 작동하기 때문에 두 번째 문으로 발생 그래서 뭐. 언제 성명을 언제 닫을 수 있습니까?

가비지 수집기가 더 이상 필요하지 않고 연결이 닫히면 컨텍스트 개체를 지 웁니다.

using statementIDisposable을 읽어야합니다.

+0

예, 그렇지만 연결은 닫습니까? 모든 경우에? Dispose는 컨텍스트에서 호출되지만 Connection은 어떻게 영향을 받습니까? –

+0

MSDN에 따르면 항상 연결이 닫히지 않습니다. Dispose : '데이터베이스 (DbConnection 개체)에 대한 연결도이 컨텍스트에서 생성되었거나이 컨텍스트를 만들 때이 컨텍스트에이 소유권이 전달 된 경우에도 삭제됩니다. . ' – MarcinJuraszek

+0

기본 설정을 사용 중이며 :()이 아닌 경우에는 묻지 않을 것입니다. 연결에 문제가없는 경우 연결 풀링에 대해서도 읽으십시오. –

관련 문제