Это следует из ответа stepanZ ... Я получил эту ошибку при использовании Entity Framework Code First
с AutoMapper
.
При настройке AutoMapping
у нас есть поля createddt
, updateddt
, createdby
и updatedby
, которые автоматически устанавливаются в нашей функции public override int SaveChanges()
.При этом вы должны убедиться, что вы задали эти поля, чтобы они игнорировались AutoMapper
, в противном случае база данных будет обновлена с null
для тех полей, если они не предоставлены из View
.
Myпроблема заключалась в том, что я неправильно указал источник и назначение, поэтому пытался игнорировать поля при установке ViewModel
, а не при установке Model
.
Mapping
выглядело таккогда я получил эту ошибку (примечание: cfg.CreateMap<Source, Destination>()
во второй строке отображает Model
на ViewModel
и устанавливает Ignore()
)
cfg.CreateMap<EventViewModel, Event>();
cfg.CreateMap<Event, EventViewModel>()
.ForMember(dest => dest.CreatedBy, opt => opt.Ignore())
.ForMember(dest => dest.CreatedDt, opt => opt.Ignore())
.ForMember(dest => dest.UpdatedBy, opt => opt.Ignore())
.ForMember(dest => dest.UpdatedDt, opt => opt.Ignore());
Источник и пункт назначения должны игнорироватьсядля сопоставления от ViewModel
до Model
(примечание: приведенный ниже код является верным, когда Ignore()
помещен против сопоставления для ViewModel
в Model
)
cfg.CreateMap<Event, EventViewModel>();
cfg.CreateMap<EventViewModel, Event>()
.ForMember(dest => dest.CreatedBy, opt => opt.Ignore())
.ForMember(dest => dest.CreatedDt, opt => opt.Ignore())
.ForMember(dest => dest.UpdatedBy, opt => opt.Ignore())
.ForMember(dest => dest.UpdatedDt, opt => opt.Ignore());