2015-01-20 4 views
0

Automapper 3.3.0으로 투영 매핑을 만들어 내 엔터티의 두 속성을 DTO의 한 속성으로 매핑하려고합니다. 이 하나라는 NotSupportedException을 던져 우리의 MSSQL 데이터베이스에 대해 쿼리를 생성하는,투영 - 두 속성을 하나로 매핑

Mapper.CreateMap<Entity, DTO>() 
.ForMember(
    d => d.Start, map => map.MapFrom(e => e.StartDate.Add(e.StartTime.TimeOfDay)) 
) 

문제는 다음과 같습니다

public class Entity 
{ 
    public DateTime StartDate { get; set; } 
    public DateTime StartTime { get; set; } 
} 

public class DTO 
{ 
    public DateTime Start { get; set; } 
} 

그래서 나는이 같은 투사를 만들 예를 들어

LINQ to Entities는 메서드 DateTime.Add()을 알지 못합니다.

이 문제를 어떻게 해결합니까?

+0

LINQ to Entities는 LINQ to Entities의 SQL 쿼리로 변환하는 방법을 전혀 모르기 때문에'DateTime.Add()'를 좋아하지 않습니다. 'TimeOfDay'에도 문제가있을 것입니다. 왜냐하면 그건 지원되지 않기 때문입니다. – IronMan84

답변

0

우리는이 문제를 해결하기 위해 관리했습니다를 이 함수는 LINQ to Entities에 의해 호출되므로 데이터베이스의 함수를 호출합니다.

0

EF이 처리하는 방법을 알고하지 않기 때문에 내가 계산해야 할 대상 유형에 속성을 만들 것입니다 : "가짜 방법 어떤을 만들어

public class Entity 
{ 
    public DateTime StartDate { get; set; } 
    public DateTime StartTime { get; set; } 
} 

public class DTO 
{ 
    public DateTime StartDate { get; set; } 
    public DateTime StartTime { get; set; } 
    public DateTime Start { get { return StartDate.Add(StartTime.TimeOfDay); } } 
} 
+0

이 솔루션도 마음에 들었지 만 제 동료는 DataTables의 필터링 및 정렬 작업이 엔티티 필드가 필요한만큼 작동하지 않는다고했습니다. 그래서 정렬이나 필터링을 시도하는 경우 응용 프로그램이 기본 엔티티/속성을 해결할 수 없으므로 예외가 발생합니다. –

+0

그런 다음 질문은 "Entity Framework의 별도 필드에있는 날짜와 시간을 결합하는 방법"입니다. AutoMapper는 식을 쿼리 공급자에게 전달합니다. 쿼리 공급자가 해당 식을 지원하지 않으면 해당 계층의 대체 방법을 파악하는 것은 사용자의 몫입니다. –

관련 문제