1

EF 4.1이 출시 된지 1 년이 넘었고 EF CodeFirst와 협력 해 왔으며 이제는 그 일을 꽤 편하게 생각합니다. 사용자 정의 엔티티 유효성 검사기에 익숙합니다. 일부는 비헤이비어를 수정하고 비표준 db 객체에 매핑하는 것과 같은 사소한 개념에 대해서는 .SaveChanges()를 재정의하는 데 익숙합니다. 그러나 나를 흐린 채로 남아있는 EF의이 부분들 : context.Configuration.LazyLoadingEnabled = false;.EF 코드 이해 - 첫 번째 열망로드

기본 사항을 이해하면 linq 쿼리가 호출되는 즉시 데이터베이스에 던져 질 것이고 명시 적으로 지정하지 않으면 종속 컬렉션이로드되지 않습니다. yadda yadda yadda. 내가 이해하고 싶습니다 :

  • 어떤 상황에서 지연로드를 비활성화해야합니까? 그리고 왜?
  • 사용 중지의 실제 이점 및/또는 단점은 무엇입니까?
  • 추가 설명은 환영합니다.

답변

0

EF v1은 지연로드를 지원하지 않았습니다. 게으른 로딩이 2 라운드 (EF4)에 추가되면 EF v1로 작성된 앱을 EF4로 포팅 할 때 갑자기 훨씬 많은 쿼리가 발생했을 때 문제가 발생할 수 있습니다. 따라서 EF4에서 EF v1 작업을 수행하는 가장 쉬운 방법은 지연로드를 비활성화하는 것입니다.

또 다른 흥미로운 점은 지연로드가 구현되는 방식을 살펴 보는 것입니다. EF는 엔티티 유형에서 파생 된 유형을 동적으로 생성하고 지연로드를 처리하는 코드를 추가합니다. 이것은 EF가 실제로 자신의 타입을 사용하는 것이 아니라 자신의 타입에서 파생 된 타입을 사용한다는 것을 의미합니다. 일반적으로 문제는 없지만 때로는 문제가 발생할 수 있습니다.

마지막으로 쿼리가 실제로 데이터베이스로 전송되는 시점을 제어하려고 할 수 있습니다 (예 : Sql Azure를 사용할 때의 대기 시간 때문에 더 작은 쿼리를 반환하는 대신 더 큰 결과를 반환하는 쿼리를 보내는 것이 더 빠르고 더 빠름) 결과). 게으른로드로 인해 사람들은 필요하지 않거나 효과적이지 않을 때 데이터베이스를 강타한 것을 깨닫지 못하는 경우가 종종 있습니다. 여기서 두 가지를 혼합 할 수 있다는 것을 알아 두어야합니다. --Incllude()는 느린 로딩 설정에 관계없이 관련 엔티티를 강제로로드합니다. 여기 http://thedatafarm.com/blog/data-access/a-look-at-lazy-loading-in-ef4/과 : http://msdn.microsoft.com/en-us/magazine/hh205756.aspx

+0

무엇에 대한 필터링 DbSets

당신은 여기에 대한 자세한 내용을보실 수 있습니다? eager/lazy loading이 그것에 참여할 수 있습니까? –

+0

필터링 된 DbSets로 무엇을 참조하는지 잘 모르겠습니다. 느린 로딩은 탐색 속성에 대해 수행됩니다. – Pawel