1

게으른로드와 열정적 인로드를 결합 할 수 있는지 궁금합니다. 예를 들어 관련 엔티티 데이터를로드 할 필요가없는 GET 메서드가있는 하나의 웹 API 컨트롤러가 있지만 다른 웹 API 컨트롤러와 해당 메서드를 사용하여 관련 엔터티에서 데이터를 검색해야합니다.EF에서 게으르고 열정적으로 결합하기

이 두 가지 접근 방식을 결합하는 것이 좋으며 설정할 필요가있는 특정 구성이 있습니까?

+0

두 가지를 결합 할 수는 있지만 지정된 시나리오는 열망하는로드만으로 수행 할 수 있습니다. 가능하다면 오직 하나의 접근 방식을 고수하는 것이 훨씬 낫습니다. –

+2

이 질문이 "좋은 연습"보다 조금 더 많은 의견을 기반으로 할 것인지 궁금합니다. –

+0

물론 의견을 기반으로합니다. 어떤 요구 사항을 모른 채 좋은 연습을 어떻게 추천 할 수 있습니까? –

답변

2

네, 그렇게 할 수 있습니다. 그리고 당신 같은 실제 상황에 따라 좋은 연습입니다.

Lazyloding이 필요하지 않은 경우 해당 특정 방법에서 아래 표시된 것처럼 비활성화 할 수 있습니다.

public List<PropertyListDto> SearchProperties(AdditionalSearchInput input) 
{ 
    _context.Configuration.LazyLoadingEnabled = false;//to remove lazy loading 

    ///your code 
} 

참고 : 엔티티 프레임 워크 4에서와 게으른로드 이상은 기본적으로 사용됩니다. disable은 전 세계적으로 DbContext 레벨 또는 위에 표시된대로 query level에 선택적으로 표시 할 수 있습니다.

여기에 DbContext 레벨로하는 방법입니다.

public partial class MyDBEntities : DbContext 
    { 
     public MyDBEntities(): base("name=MyDBEntities") 
     { 
      this.Configuration.LazyLoadingEnabled = false; 
     } 
    } 

업데이트 : 표시된대로 각각의 방법에 query level에주고 필요하지 않습니다 below.Then 당신은 constractor 수준에서 비활성화 할 수 있습니다 당신이 필요하지 않습니다 lazyloding 50 컨트롤러 . 그것을 구현하는 것이 매우 빠른 방법이라고 생각합니다.

public class YourAppService : IYourAppService 
    { 
     private readonly YourDbContext _context; 

     public YourAppService(YourDbContext context) 
     { 
      _context = context; 
      _context.Configuration.LazyLoadingEnabled = false;//to remove lazy loading 
     } 
} 
+0

기본적으로 지연로드가 설정되어 있습니까? 그래서 열망하는로드를 사용해야한다면 지금 설명했던 것을 할 것입니다. – ruud

+0

예, 기본값은'on'입니다. 예를 들어,'Eager loading '을 사용할 때 위와 같이 할 수 있습니다. – Sampath

+0

만약 내가'this.Configuration.LazyLoadingEnabled = false;'를 할 경우, _Include_ 메소드를 사용하여 각 메소드에 eager loading을 구현해야합니까? 이 구성에 기반하여 GET 메서드의 결과는 무엇입니까 (관련 엔터티가로드되었는지 여부)? – ruud