Проблемы при отображении с использованием автоматического C # - PullRequest
2 голосов
/ 04 октября 2019

Необходимо перенести данные из старой базы данных в новую с некоторыми изменениями в поле. Пробовал использовать 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

Сообщение = Типы отображения ошибок.

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 Ответ

1 голос
/ 04 октября 2019

Я думаю, что Питер прав. AutoMapper требуется пользовательская карта из-за несоответствия типов в "Updated On". Измените строку 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));

Вы можете изменить поведение по умолчанию, но вы не можете просто использовать .value для свойства в случае, если оно равно нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...