IT Share you

Entity Framework 4에서 기본적으로 지연로드 비활성화

shareyou 2020. 12. 2. 22:13
반응형

Entity Framework 4에서 기본적으로 지연로드 비활성화


지연 로딩은 EF4에서 기본적으로 활성화되어있는 것 같습니다. 적어도 내 프로젝트에서는

dataContext.ContextOptions.LazyLoadingEnabled

기본적으로 true입니다. 지연 로딩을 원하지 않고 다음과 같이 작성하고 싶지도 않습니다.

dataContext.ContextOptions.LazyLoadingEnabled = false;

새로운 맥락을 얻을 때마다. 그렇다면 전체 프로젝트에서 기본적으로 끄는 방법이 있습니까?


다음 답변은 Database-First 또는 Model-First 워크 플로 (질문이 요청되었을 때 Entity Framework (버전 <= 4.0)에서 사용할 수 있었던 유일한 두 워크 플로)를 나타냅니다. 당신이 사용하는 경우 코드 - 일층의 ssmith의로 진행 (EF 버전> = 4.1부터 사용할 수 있습니다) 워크 플로우 대답 올바른 솔루션에 대한이 질문을.


edmx 파일에는 <ConceptualModel><EntityContainer>정의에 지연로드를 일반적으로 false로 설정할 수있는 지연로드에 대한 속성이 있습니다.

<EntityContainer Name="MyEntitiesContext" annotation:LazyLoadingEnabled="false">

그러면 ObjectContext 생성자에 다음 설정이 생성됩니다.

public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext")
{
    this.ContextOptions.LazyLoadingEnabled = false;
    OnContextCreated();
}

내 예제는 생성 된 ObjectContext(또는 DbContext최신 EF 버전에서) 수동으로 편집해야하는 방식이 아니라 (ctorx가 지적한대로 데이터베이스의 모든 모델 업데이트로 덮어 쓰게 됨) EDMX 파일 섹션의 EntityContainer요소 속성 edmx:ConceptualModels을 추가하여 편집해야합니다 annotation:LazyLoadingEnabled="false". XML 편집기에서 수동으로 또는이 옵션을 사용할 수있는 디자이너 화면의 속성 페이지에서 EDMX를 마우스 오른쪽 단추로 클릭 한 다음 속성을 클릭합니다.

여기에 이미지 설명 입력

EDMX 파일을 수정하면 위와 같이 생성자에서 비활성화 된 지연 로딩 옵션을 사용하여 컨텍스트 클래스가 자동으로 생성됩니다. EDMX 파일 수정 자체는 데이터베이스에서 모델이 업데이트 될 때 덮어 쓰여지지 않습니다.


새로운 Lazy Loading 기능이 EF Code First와 함께 작동하는 방법을 보여주는 간단한 샘플을 작성했습니다 . Code First 모델에서 원하는 것을 달성하려면 다음과 같이 DbContext의 생성자에 한 줄을 추가하면됩니다.

public BlogContext()
{
    this.Configuration.LazyLoadingEnabled = false;
}

EF4 Code First를 사용하고 있다면, 그렇죠? 따라서 컨텍스트 초기화에는 'OnModelCreated'의 재정의가 있습니다.

이 방법에서는 단순히 속성을 호출하여 설정하고 모든 것이 해결되었습니다.

protected override void OnModelCreating(DbModelBuilder modelBuilder) {
     base.Configuration.LazyLoadingEnabled = false;
}

내 모델은 이제 훨씬 더 맛있어졌습니다. 지연 로딩은 훌륭하지만 원하지 않을 때는 그렇지 않습니다. 그리고 순환 참조를 시작하면 우스꽝 스럽습니다.


디자이너 에게서도 할 수 있습니다. .edmx 파일을 열고 모델의 아무 곳이나 마우스 오른쪽 버튼으로 클릭 한 다음 속성을 선택하면됩니다. 그런 다음 LazyLoadingEnabled을 false로 설정하십시오 .여기에 이미지 설명 입력


코드 우선 모델링을하는 경우 virtual참조 / 객체 속성 에서 키워드를 제거하기 만하면 됩니다. 참조에 가상이 있으면 해당 특정 참조에서 LazyLoading이 활성화됩니다.

참고 URL : https://stackoverflow.com/questions/2967214/disable-lazy-loading-by-default-in-entity-framework-4

반응형