를 생성합니다.
생성 된 SQL 문은 같은 테이블에 LEFT JOIN이 20 개 있습니다. 이 행동을 본 사람이 있습니까?Automapper - EF와 프로젝션 내가 데이터 계층에서 "POCO 모델"</i>의 <i> 된 IQueryable에 매핑하는 "EF 개체"내 <i> 된 IQueryable</i>에 <i> 프로젝트()</i>를 사용하고 추한 SQL을
쿼리되는 개체에 중첩 된 복잡한 개체가 있습니다.
를 생성합니다.
생성 된 SQL 문은 같은 테이블에 LEFT JOIN이 20 개 있습니다. 이 행동을 본 사람이 있습니까?Automapper - EF와 프로젝션 내가 데이터 계층에서 "POCO 모델"</i>의 <i> 된 IQueryable에 매핑하는 "EF 개체"내 <i> 된 IQueryable</i>에 <i> 프로젝트()</i>를 사용하고 추한 SQL을
쿼리되는 개체에 중첩 된 복잡한 개체가 있습니다.
동일한 문제가 있습니다. 나는 그것에 관해 무엇을해야할지 모른다. 그러나 나는 문제가 무엇인지 이해한다고 생각한다. 즉, Entity Framework는 특정 쿼리 구조에서 조인을 복제하고 AutoMapper는 이러한 쿼리 구조를 사용합니다.
Entity Framework가 linq 쿼리에서 entity.Relationship.Field1
및 entity.Relationship.Field2
을 볼 때 각 필드에 대해 별도의 조인을 생성합니다.
from entity in dbSet
select new { entity.Relationship.Field1, entity.Relationship.Field2 }
는 다음과 같은 SQL을 생성 할 수 있습니다 : 예를 들어
SELECT [Extent2].[Field1], [Extent3].[Field2]
FROM EntityTable AS [Extent1]
JOIN RelatedTable AS [Extent2] ON [Extent1].[RelationshipID] = [Extent2].[ID]
JOIN RelatedTable AS [Extent3] ON [Extent1].[RelationshipID] = [Extent3].[ID]
일반적으로 이 이중 결합과 같은 LINQ를 작성하여 방지 할 수 있습니다 :
from entity in dbSet
let relatedValue = entity.Relationship
select new { relatedValue.Field1, relatedValue.Field2 }
생산 :
SELECT [Extent2].[Field1], [Extent2].[Field2]
FROM EntityTable AS [Extent1]
JOIN RelatedTable AS [Extent2] ON [Extent1].[RelationshipID] = [Extent2].[ID]
불행하게도,이 컨트롤은 AutoMapper에 없습니다. .Project().To()
을 사용할 때, 그들은 첫 번째 예제에서와 같이 각각의 "선택"매핑을 따로 그리고 완전하게 생성합니다. 재사용 할 관계/조인을 볼 수도 있지만 쿼리를 작성하는 방법에 따라 let
구문을 사용할 수 없을 수도 있습니다.
이 해결 방법은 나를 위해 작동합니다. 그리고 이것에 관한 스레드 토론이 있습니다. @EnvisionAndDevelop https://github.com/AutoMapper/AutoMapper/issues/621입니다. –
적어도 제 경우에는 프로젝트와 관련이있는 것처럼 보입니다. EF는 프로젝트를 수행하지 않으면 깨끗한 SQL을 생성합니다. – jDeveloper