레거시 데이터베이스에서 생성 된 내 Entity Framework 엔터티를 사용자 지정 DTO 개체에 매핑하려고합니다 (좋고 깨끗해야 함).다른 속성 유형이있는 AutoMapper 개체
내 기존 DB는 다음과 같이 조금보고 기관이 있습니다
internal class Order {
int id;
string Shipping_date;
string quantity;
}
을 그리고 난 더 좋은 DTO 객체에 매핑 할 : 내가 "개체 컨테이너"를 작성했습니다
public class OrderDto {
int id;
DateTime? ShippingDate;
int Quantity;
}
의존성 주입을 제공하면 다음과 같이 값을 반환합니다.
public IEnumerable<OrderDto> GetPaginatedOrders(int page, int pageSize)
{
return this.db.Orders
.OrderByDescending(c => c.id)
.Paginate(page, pageSize)
.Project()
.To<OrderDto>()
.AsEnumerable();
}
그래서 유형 변경 및 p 로퍼티 이름.
이Mapper.CreateMap<Order, OrderDto>()
.ForMember(dest => dest.Quantity, opt => opt.MapFrom(src => src.quantity))
.ForMember(dest => dest.ShippingDate, opt => opt.MapFrom(src => src.Shipping_date));
이 유형의 변화에 충분하지 않다 :
은 속성 이름의 변화는 지루하기 쉬운하지만-것을이었다.src => int.Parse(src.quantity)
과 같은 매핑 선언에서 속성을 구문 분석하지만 Linq은이를 좋아하지 않습니다.QuantityInt { get { return int.Parse(this.quantity) } }
과 같은 사용자 지정 속성으로 EF 엔터티를 확장하고 매핑에서이 속성을 사용하지만 AutoMapper는이를 좋아하지 않으며 명시 적으로 지원하지 않습니다.Mapper.CreateMap<string, int>().ConvertUsing(Convert.ToInt32)
과 같은 시스템 유형이 서로 매핑되지만 여전히Unable to create a map expression from System.String to System.Int32
오류가 발생합니다.- 내 클래스에 대한 사용자 지정 변환기를 사용하지만 런타임시 내 개체에서 항상
ResolutionContext.SourceValues
의 빈 값을 가져옵니다. AutoMapper가 가져 오기 전에 삭제 된 것 같습니다.
저는 AutoMapper가 대회 방식이라는 것을 알고 있습니다. 그래서 다른 도구를 사용해야 할 수도 있지만 어느 것이 있습니까?
도움 주셔서 감사합니다.
db 쿼리 (linq) 내부에 매핑되어 있지만 ToList, First, Single 등을 호출 한 후 최종 개체 자체는 매핑하지 않은 것 같습니다. 그래서 당신이 엔티티를 먼저 쿼리 한 다음 맵핑을 시도해야한다고 생각합니다. –
조만간'Mapper.Map (...)'을 사용하여 쿼리를 매핑하거나 'Automapper.QueryableExtensions'의 Queryable Extensions 네임 스페이스에서'.Project(). To ()'하고 있습니까? –
질문에 사용 샘플을 추가했습니다. Project()를 사용하고 있습니다. 쿼리의 To(). – thomasb