Entity Framework 5 빠른로드. 쿼리는 어떻게 작성됩니까?

스턴트맨

EF5를 가지고 놀면서 이상한 점을 발견했습니다. 이 두 클래스와 간단한 쿼리가 주어지면

public class Customer {
  public string Name { get; set; }
  public string Email { get; set; }
  ...
  public virtual IList<Order> Orders { get; set; }
} 

public class Order {
  public Customer Cust { get; set; }
  public Datetime DateOrdered { get; set; }
  ...
}

using (var ctx = new DatabaseContext(connstring))
{
 Customer c= ctx.customers.Include(x => x.orders).Where(x => x.Id == 1).Single<Customer>();

 foreach (Order o in c.orders)
 {
   Console.WriteLine(o.ToString());
 }
}

SQL Server Profiler 출력을 확인했는데 쿼리가 불필요하게 복잡하다고 생각합니다.

SELECT 
[Project1].[Id] AS [Id], 
[Project1].[name] AS [name], 
[Project1].[C1] AS [C1], 
[Project1].[Id1] AS [Id1], 
[Project1].[customer_Id] AS [customer_Id], 
[Project1].[timeordered] AS [timeordered]
FROM ( SELECT 
    [Limit1].[Id] AS [Id], 
    [Limit1].[name] AS [name], 
    [Extent2].[Id] AS [Id1], 
    [Extent2].[customer_Id] AS [customer_Id], 
    [Extent2].[timeordered] AS [timeordered], 
    CASE WHEN ([Extent2].[Id] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1]
    FROM   (SELECT TOP (2) [Extent1].[Id] AS [Id], [Extent1].[name] AS [name]
        FROM [dbo].[Customers] AS [Extent1]
        WHERE 1 = [Extent1].[Id] ) AS [Limit1]
    LEFT OUTER JOIN [dbo].[Orders] AS [Extent2] ON [Limit1].[Id] = [Extent2].[customer_Id]
)  AS [Project1]
ORDER BY [Project1].[Id] ASC, [Project1].[C1] ASC

내가 뭔가를 놓치고 있다고 확신하지만 무엇을 모르거나 eager loading의 정상적인 동작입니까?

마테오 모스카

그것은 정상입니다. 간단한 경우 (1 포함)에서 실제 쿼리를 하위 쿼리로 수행하는 EF를 확인한 다음이를 선택하고 순서를 적용합니다.

단일 쿼리에 더 많은 포함을 포함하려고하면 엔터티 당 단일 쿼리를 수행 한 다음 쿼리를 모두 "결합"하고 마지막으로 결과를 선택하기 때문에 동작이 변경되는 것을 볼 수 있습니다.

내 경험상 EF의 열렬한 로딩은 거의 항상 성능 저하를 가져 오기 때문에 특정 요구 사항이 있고 성능 영향을 깊이 고려하지 않는 한 피하는 것이 좋습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

이 Entity Framework 쿼리를 어떻게 작성해야합니까?

Entity Framework 엔터티로드는 어떻게 작동합니까?

Entity Framework의 Find 메서드는 어떻게 작동합니까?

이 SQL을 Entity Framework LINQ 쿼리로 어떻게 변환합니까?

Entity Framework Core는 foreach ()와 어떻게 작동합니까?

Entity Framework 6.1-일시 삭제 된 레코드를 어떻게 쿼리 할 수 있습니까?

Entity Framework Core : 탐색 속성이로드되었는지 어떻게 확인합니까?

Entity Framework .NET Core를 사용하여 where 절이있는 SQL 업데이트 쿼리를 작성하려면 어떻게해야합니까?

Entity Framework는 느리게 응답하지만 생성 된 쿼리는 SqlDeveloper 워크 시트에서 빠르게 실행됩니다.

Entity Framework 쿼리 내에서 빈 목록을 어떻게 초기화합니까?

Entity Framework를 다른 클래스에 쿼리하고 목록 속성 대신 개수를 가져 오려면 어떻게해야합니까?

Entity Framework / MS-SQL의 포함 쿼리에서 느린 성능을 어떻게 처리 할 수 있습니까?

Entity Framework로 애플리케이션을 게시하려면 어떻게 해야 합니까?

Entity Framework-빠른로드, 나열 할 모든 속성

List <>가있는 모델 .. Entity Framework에서 어떻게 작동합니까?

Entity Framework의 Eager Loading이 작동하는지 어떻게 알 수 있습니까?

Entity Framework는 기본 키 값에 대한 GUID를 어떻게 생성합니까?

SQLite Entity Framework 6 공급자는 Guid를 어떻게 처리합니까?

Entity Framework Core - 동시에 실행된 쿼리는 다른 환경에서 다르게 작동합니다.

ASP.NET MVC 5 및 ID (Entity Framework 코드 우선)에서 사용자를 다른 사용자에 연결하려면 어떻게해야합니까?

반환된 모든 로그의 5%를 샘플링하는 스택 드라이버 로그 쿼리를 작성하려면 어떻게 해야 합니까?

Entity Framework 쿼리에서 개체 수준 논리를 공유하려면 어떻게해야합니까?

Entity Framework Core : 중첩 필드가있는 레코드를 업데이트하려면 어떻게합니까?

Rails 5에서 멤버 필드에 "like"쿼리를 작성하려면 어떻게해야합니까?

Entity Framework는 .NET (VB.NET)의 자동 구현 속성을 어떻게 처리합니까?

Entity Framework Core 2.1을 사용하여 다 대다 관계를 어떻게 쿼리합니까?

Entity Framework를 사용하여 외래 키 개체를 쿼리하려면 어떻게해야합니까?

Entity Framework 쿼리의 매개 변수를 얻으려면 어떻게해야합니까?

Entity Framework를 통해 INFORMATION_SCHEMA를 쿼리하려면 어떻게해야합니까?

TOP 리스트

  1. 1

    Ionic 2 로더가 적시에 표시되지 않음

  2. 2

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  3. 3

    std :: regex의 일관성없는 동작

  4. 4

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  5. 5

    java.lang.UnsatisfiedLinkError : 지정된 모듈을 찾을 수 없습니다

  6. 6

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  7. 7

    상황에 맞는 메뉴 색상

  8. 8

    SMTPException : 전송 연결에서 데이터를 읽을 수 없음 : net_io_connectionclosed

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    Windows cmd를 통해 Anaconda 환경에서 Python 스크립트 실행

  11. 11

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  12. 12

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  13. 13

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  14. 14

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  15. 15

    복사 / 붙여 넣기 비활성화

  16. 16

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  17. 17

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  18. 18

    SQL Server-현명한 데이터 문제 받기

  19. 19

    Seaborn에서 축 제목 숨기기

  20. 20

    ArrayBufferLike의 typescript 정의의 깊은 의미

  21. 21

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

뜨겁다태그

보관