在MVC应用程序中执行相同实体类型的副本,但希望忽略复制主键(对现有实体进行更新).但是,在下面的地图中将Id列设置为忽略不起作用,并且正在覆盖Id.
cfg.CreateMap<VendorContact, VendorContact>()
.ForMember(dest => dest.Id, option => option.Ignore())
.ForMember(dest => dest.CreatedById, option => option.Ignore())
.ForMember(dest => dest.CreatedOn, option => option.Ignore())
;
执行地图:
existingStratusVendorContact = Mapper.Map<VendorContact>(vendorContact);
看到this other answer,但看起来我已经这样做了.
更新:
Fyi,我在Global.asax中创建我的地图,如下所示:
Mapper.Initialize(cfg =>
{
cfg.CreateMap<VendorContact, VendorContact>()
.ForMember(dest => dest.Id, option => option.Ignore())
.ForMember(dest => dest.CreatedById, option => option.Ignore())
.ForMember(dest => dest.CreatedOn, option => option.Ignore())
;
});
解决方法:
您的问题是您没有给予现代对象automapper. Automapper绝对可以做到这一点.
Mapper.Map<VendorContact>(vendorContact, existingStratusVendorContact);
应该做你想做的.您当前的代码正在创建一个全新的对象,并将现有的StratusVendorContact替换为全新的对象.上面的代码将按预期采用现有对象和更新值.