2013-11-01 2 views
0

CreateMap와automapper

Mapper.CreateMap<Unidade, unidadeDTO>(); 
Mapper.CreateMap<unidadeDTO, Unidade>(); 




public ICollection<Unidade> BuscarPorParametos(Expression<Func<Unidade, bool>> parametros) 
{ 
    return Mapper.Map<ICollection<unidadeDTO>, ICollection<Unidade>>(unidadeDeTrabalho.UnidadeDAO.BuscarPorParametros(Mapper.Map<Expression<Func<Unidade, bool>>, Expression<Func<unidadeDTO, bool>>>(parametros))); 
} 

Automapper 예외 표현 >를 매핑하는 방법 :

누락 형태 맵 구성 또는 지원되지 않는 매핑.

매핑 유형 : 식 1 1 -> Expression System.Linq.Expressions.Expression 1[[System.Func 2 [Unidade, Dominio, 버전 1.0.0.0 = 문화 = 중립 가 PublicKeyToken = NULL], [옵션 System.Boolean, mscorlib에, 버전 = 4.0.0.0, 문화 = 중립 PublicKeyToken = b77a5c561934e089], mscorlib에, 버전 4.0.0.0 = 문화 = 중립 PublicKeyToken = b77a5c561934e089] -> System.Linq.Expressions.Expression 1[[System.Func 2 [unidadeDTO , Infraestrutura, 버전 = 1.0.0.0, 문화 = 중립, PublicKeyToken = null], [System.Boolean, mscorlib, 버전 = 4.0.0.0, 문화 = 중립, PublicKe yToken = b77a5c561934e089], mscorlib에, 버전 4.0.0.0 = 문화 = 중립 PublicKeyToken = b77a5c561934e089]

대상 경로 : Expression`1

소스 값 : p => ((p .CodUnidade == 1) AndAlso (p.CodTrabalho == 1))

+2

나는'Expression's에 automapper를 사용할 수 있다고 생각하지 않습니다. 일반적으로 표현식을 쿼리의 일부로 사용하고 그런 쿼리의 결과를 다른 클래스에 자동 매핑합니다. –

+0

'CreateMap' 문을 보여줄 수 있습니까? –

+0

Mapper.CreateMap (); Mapper.CreateMap (); – joaoeduardorf

답변

2

Expressions 및 AutoMapper를 사용하는 경우 Queryable Extensions 네임 스페이스를 사용해야합니다.

일반 자동 매퍼와 다른 구문을 사용합니다. 일반적으로 원하는 결과 집합을 얻기 위해 쿼리와 함께 사용합니다.

//---- Declared elsewhere 
Mapper.CreateMap<Unidade, unidadeDTO>(); 
Mapper.CreateMap<unidadeDTO, Unidade>(); 
//---- 

public static IQueryable<unidadeDTO> ConvertToDTO(IQueryable<Unidade> source) 
{ 
    return source.Project().To<unidadeDTO>(); 
} 

이제 새로운 IQueryable에 대해 필터 식을 쓸 수 있으며 변경 사항이 원본 SQL에 반영됩니다. 이것은 당신이 내가 필터링을 수행하기 위해 DTO의 재산 ItemName을 사용하고 어떻게

public class OrderLine 
{ 
    public int Id { get; set; } 
    public int OrderId { get; set; } 
    public Item Item { get; set; } 
    public decimal Quantity { get; set; } 
} 

public class Item 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

public class OrderLineDTO 
{ 
    public int Id { get; set; } 
    public int OrderId { get; set; } 
    public string ItemName { get; set; } 
    public decimal Quantity { get; set; } 
} 

public class OrderDAL 
{ 
    static OrderDAL() 
    { 
     Mapper.CreateMap<OrderLine, OrderLineDTO>() 
      .ForMember(dto => dto.ItemName, conf => conf.MapFrom(ol => ol.Item.Name); 
    } 

    public List<OrderLineDTO> GetLinesForOrder(string itemName) 
    { 
     using (var context = new orderEntities()) 
     { 
     return context.OrderLines.Project().To<OrderLineDTO>() 
       .Where(i => i.ItemName == itemName).ToList(); 
     } 
    } 
} 

공지 사항 등의 작업을 수행 할 수 있습니다.