문제

DB를 다루는 몇 가지 방법이 있으며 모두 전화로 시작합니다.

FaierDbDataContext db = new FaierDbDataContext();

LINQ2SQL DataContext 객체는 idisposable을 구현하기 때문에 "사용"과 함께 사용해야합니까?

using (FaierDbDataContext db = new FaierDbDataContext()) {
    // use db here
}

어떤 식 으로든 그것을 사용하는 의미는 무엇입니까?

도움이 되었습니까?

해결책

idisposable을 구현하는 대부분의 유형과 달리 DataContext는 실제로 대부분의 경우 처분을 필요로하지 않습니다. 나는 Matt Warren 이이 디자인 결정에 대해 물었고 여기에 그의 답변이있었습니다.

우리가 idisposable을 구현 한 몇 가지 이유가 있습니다.

  • 응용 프로그램 논리가 Datacontext를 사용하거나 유효 할 것으로 예상되는 경우에 대한 엔티티를 보류 해야하는 경우 처분 호출을 통해 해당 계약을 시행 할 수 있습니다. 해당 엔터티의 지연된 로더는 여전히 데이터 콘텍스트를 참조 할 것이며, 모든 코드가 지연된 속성을 탐색하려고 시도하면이를 사용하려고합니다. 이러한 시도는 실패 할 것입니다. 또한 DataContext가 구체화 된 엔티티의 캐시를 덤프하도록 강요하여 단일 캐시 된 엔티티가 실수로 해당 데이터 컨텍스트를 통해 구체화 된 모든 엔티티를 실수로 유지하지 않도록합니다. 그렇지 않으면 메모리 누출로 보일 수 있습니다.
  • DataContext 연결을 자동으로 닫는 논리는 연결을 열어 두는 데 속일 수 있습니다. DataContext는 결과 세트가 끝날 때 연결을 끝내기 때문에 쿼리의 모든 결과를 열거하는 응용 프로그램 코드에 의존합니다. 응용 프로그램이 C# 또는 VB의 Foreach 명령문 대신 ienumerable의 movenext 메소드를 사용하는 경우 열거를 조기에 종료 할 수 있습니다. 응용 프로그램에서 연결이 닫히지 않으면 문제가 발생하지 않고 자동 폐쇄 동작이 작동하지 않는 것으로 의심되는 경우, 처리 패턴을 작업으로 사용할 수 있습니다.

~로부터 원천

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top