2009-12-21 19 views
15

Estoy probando un método en una unidad que utiliza automapper para asignar una clase de mi dominio a una clase linq a sql. Aproximadamente, las clases y el mapeo están por debajo (El Supplier EligibilityAllocated es una clase generada automáticamente por L2S).Obtener una excepción con AutoMapper

public class SupplierEligibilityTransactionByQuantity 
{ 
    public decimal Eligibility { get; private set; } 
    public decimal CoreValue { get; private set; } 
    public int? TransactionId { get; private set; } 
    public SupplierTransactionStatus Status { get; private set; } 
    public int? DebitId { get; set; } 
    public int ManifestId { get; private set; } 
} 

public partial class SupplierEligibilityAllocated 
{ 
private int _SupplierEligibilityCreditId; 
private int _ManifestId; 
private System.Nullable<int> _QuantityApplied; 
private System.Nullable<decimal> _AmountApplied; 
private System.Nullable<decimal> _CoresReservedByAmount; 
private System.DateTime _InsertDate; 
private EntityRef<Manifest> _Manifest; 
private EntityRef<SupplierEligibilityCredit> _SupplierEligibilityCredit; 
} 

private static void Map_SupplierEligibilityTransactionByQuantity_To_SupplierEligibilityAllocated() 
{ 
    Mapper.CreateMap<EligibilityTransactionByQuantity, SupplierEligibilityAllocated>() 
     .ForMember(dest => dest.SupplierEligibilityCreditId, opt => opt.MapFrom(src => src.TransactionId)) 
     .ForMember(dest => dest.ManifestId, opt => opt.MapFrom(src => src.ManifestId)) 
     .ForMember(dest => dest.QuantityApplied, opt => opt.MapFrom(src => Convert.ToInt32(src.Eligibility))) 
     .ForMember(dest => dest.AmountApplied, opt => opt.Ignore()) 
     .ForMember(dest => dest.CoresReservedByAmount, opt => opt.Ignore()) 
     .ForMember(dest => dest.InsertDate, opt => opt.MapFrom(src => DateTime.UtcNow)) 
     .ForMember(dest => dest.Manifest, opt => opt.Ignore()) 
     .ForMember(dest => dest.SupplierEligibilityCredit, opt => opt.Ignore()); 
} 

Cuando el método ejecuta la asignación, arroja la siguiente excepción.

Trying to map SupplierEligibilityTransactionByQuantity to SupplierEligibilityAllocated. 
Missing type map configuration or unsupported mapping. 
Exception of type 'AutoMapper.AutoMapperMappingException' was thrown. 

at AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context) 
at AutoMapper.MappingEngine.Map(Object source, Type sourceType, Type destinationType) 
at AutoMapper.MappingEngine.Map[TSource,TDestination](TSource source) 
at AutoMapper.Mapper.Map[TSource,TDestination](TSource source) 

comprobé que estoy creando la asignación antes de la prueba y me llamaron Mapper.AssertConfigurationIsValid() sin ningún problema. También hice el mapeo manualmente sin ningún problema. ¿Alguien tiene una idea de lo que podría estar causando esto?

+0

para ANY1 siempre existe la posibilidad u poner el attr IgnoreDataMember, y eso significa que fuera ur clase u no puede ver que, ese era mi problema con este ex – bresleveloper

Respuesta

9

Parece que está especificando el tipo incorrecto en su llamada a Mapper.CreateMap

Trate de hacer algo como lo siguiente:

Mapper.CreateMap<SupplierEligibilityTransactionByQuantity, SupplierEligibilityAllocated>() 
+0

Doh, pasé por alto lo obvio. Estaba mapeando el tipo incorrecto, lo que explica la excepción y por qué AssertConfigurationIsValid() no tenía problemas. – JChristian

0

Si cualquiera usando Mapper.Map() comprobar su clase mapeo & mesa de procedimientos/almacenar adecuadamente .

public static CustomerLedgerViewModel ToModel(this DJBL_tblCustomerCurrentLedger obj) 
{ 
    return Mapper.Map<DJBL_tblCustomerCurrentLedger, CustomerLedgerViewModel>(obj); 
} 

public static DJBL_tblCustomerCurrentLedger ToEntity(this CustomerLedgerViewModel model) 
{ 
    return Mapper.Map<CustomerLedgerViewModel, DJBL_tblCustomerCurrentLedger>(model); 
}