Entity Framework 및 호출 context.dispose ()
언제 DbContext.dispose()
엔티티 프레임 워크로 호출해야 합니까?
이 상상의 방법이 나쁜가요?
public static string GetName(string userId) { var context = new DomainDbContext(); var userName = context.UserNameItems.FirstOrDefault(x => x.UserId == userId); context.Dispose(); return userName; }
이게 더 낫습니까?
public static string GetName(string userId) { string userName; using(var context = new DomainDbContext()) { userName = context.UserNameItems.FirstOrDefault(x => x.UserId == userId); context.Dispose(); } return userName; }
이것이 더 낫습니까, 즉 using ()을 사용할 때 context.Dispose ()를 호출하지 않아야합니까?
public static string GetName(string userId) { string userName; using(var context = new DomainDbContext()) { userName = context.UserNameItems.FirstOrDefault(x => x.UserId == userId); } return userName; }
사실 이것은 하나의 두 가지 질문입니다.
- 나는 언제
Dispose()
컨텍스트를 해야 합니까? - 내 컨텍스트의 수명은 어떻게 되나요?
대답:
절대 1 . 블록 에서
using
암시 적Dispose()
입니다try-finally
.Dispose
예외가 일찍 발생하면 별도의 문이 누락 될 수 있습니다. 또한 대부분의 경우Dispose
(암시 적 또는 명시 적으로) 전혀 호출 하지 않는 것은 해롭지 않습니다 .예를 들어 Entity Framework 4-winform 응용 프로그램의 컨텍스트 수명 / 범위를 참조하십시오 . 요컨대 수명은 "짧아야"하고 정적 컨텍스트는 좋지 않습니다.
1 일부 사람들이 언급했듯이이 규칙의 예외는 컨텍스트가 IDisposable
자신 을 구현 하고 수명주기를 공유 하는 구성 요소의 일부인 경우입니다 . 이 경우 구성 요소 context.Dispose()
의 Dispose
메서드를 호출 합니다.
EF를 사용하기 위해 몇 가지 좋은 자습서를 따랐지만 컨텍스트를 처리하지 않습니다.
나는 그것에 대해 조금 궁금했고 존경받는 Microsoft VIP조차도 컨텍스트를 처리하지 않는다는 것을 알았습니다. 나는 것을 발견 하면 dbContext을 처분하지 않아도 정상적인 상황에서.
더 많은 정보를 원하시면 그 이유를 요약 한이 블로그 게시물 을 읽어보십시오 .
그래도 낫다:
public static string GetName(string userId)
{
using (var context = new DomainDbContext()) {
return context.UserNameItems.FirstOrDefault(x => x.UserId == userId);
}
}
using
범위 밖에서 결과를 반환 할 필요가 없습니다 . 즉시 반환하면 원하는 폐기 동작을 얻을 수 있습니다.
데이터베이스 컨텍스트를 클래스 필드로 정의하고 IDisposable
. 아래와 같은 것 :
public class MyCoolDBManager : IDisposable
{
// Define the context here.
private DomainDbContext _db;
// Constructor.
public MyCoolDBManager()
{
// Create a new instance of the context.
_db = new DomainDbContext();
}
// Your method.
public string GetName(string userId)
{
string userName = _db.UserNameItems.FirstOrDefault(x => x.UserId == userId);
return userName;
}
// Implement dispose method.
// NOTE: It is better to follow the Dispose pattern.
public void Dispose()
{
_db.dispose();
_db = null;
}
}
참고 URL : https://stackoverflow.com/questions/15666824/entity-framework-and-calling-context-dispose
'development' 카테고리의 다른 글
여러 String.Replaces의 대안 (0) | 2020.12.03 |
---|---|
자리 표시 자 텍스트 변경 (0) | 2020.12.03 |
gulp에서 파일을 복사 할 때 폴더 구조를 제거 할 수 있습니까? (0) | 2020.12.03 |
SSH 세션에서 tmux를 자동으로 시작하는 방법은 무엇입니까? (0) | 2020.12.03 |
`float`를 초기화 할 때`float`로 캐스팅하는 것과 접미사로`f`를 추가하는 것의 차이점은 무엇입니까? (0) | 2020.12.03 |