使用自动映射器C#映射时出现问题

时间:2019-10-04 13:02:30

标签: c# automapper

必须将字段中的某些更改将数据从旧数据库传输到新数据库。尝试使用AutoMapper进行相同的操作。下面是代码

var crudCommonV1 = new HAES.EDMS.DAL.CRUD.CRUDCommon<HAES.EDMS.DAL.Address>();
var addressV1List = crudCommonV1.GetAll();
var config = new MapperConfiguration(cfg => {
    cfg.AllowNullCollections = true;
    cfg.AllowNullDestinationValues = true;
    cfg.CreateMap<HAES.EDMS.DAL.Address, HAES.EDMS.V2.DAL.Address>()
        .ForMember(dest => dest.ForeignAddress, act => act.MapFrom(src => src.OverrideAddress));
});
//automapper
IMapper mapper = config.CreateMapper();
var addressListMappedFromV2ToV1 = mapper.Map<IEnumerable<HAES.EDMS.DAL.Address>, IEnumerable<HAES.EDMS.V2.DAL.Address>>(addressV1List);

但是会引发异常

  

AutoMapper.AutoMapperMappingException

     

HResult = 0x80131500

     

Message =错误映射类型。

     

Source =

     

StackTrace:

     

内部异常1:

  

AutoMapperMappingException:错误映射类型。

内部例外2:

  

AutoMapperMappingException:缺少类型映射配置或不支持的映射。

有什么想法在这里做错了吗?

编辑:

型号: HAES.EDMS.DAL.V2.Address

public System.Guid Id { get; set; }
public System.Guid CollegeId { get; set; }
public short TypeId { get; set; }
public Nullable<System.Guid> PersonId { get; set; }
public string Pincode { get; set; }
public string AddressLine1 { get; set; }
public string AddressLine2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ForeignAddress { get; set; }
public System.DateTime CreatedOn { get; set; }
public string CreatedBy { get; set; }
public System.DateTime UpdatedOn { get; set; }
public string UpdatedBy { get; set; }

HAES.EDMS.DAL.Address

public System.Guid Id { get; set; }
public short TypeId { get; set; }
public System.Guid PersonId { get; set; }
public string Pincode { get; set; }
public string AddressLine1 { get; set; }
public string AddressLine2 { get; set; }
public string OverrideAddress { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Remark { get; set; }
public System.DateTime CreatedOn { get; set; }
public string CreatedBy { get; set; }
public Nullable<System.DateTime> UpdatedOn { get; set; }
public string UpdatedBy { get; set; }

1 个答案:

答案 0 :(得分:1)

我认为彼得是正确的。由于“ UpdatedOn”上的类型不匹配,因此AutoMapper需要自定义映射。将您的createmap行更改为这样的内容...

cfg.CreateMap<HAES.EDMS.DAL.Address, HAES.EDMS.V2.DAL.Address>()
                    .ForMember(dest => dest.ForeignAddress, act => act.MapFrom(src => src.OverrideAddress))
                    .ForMember(m => m.UpdatedOn, o => o.MapFrom(f => f.UpdatedOn ?? DateTime.Today));

您可以更改默认行为,但实际上不能在属性为null的情况下仅使用.value。

相关问题