在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())
;
Run Code Online (Sandbox Code Playgroud)
执行地图:
existingStratusVendorContact = Mapper.Map<VendorContact>(vendorContact);
Run Code Online (Sandbox Code Playgroud)
看到了另一个答案,但看来我已经在这样做了。
更新:
仅供参考,我正在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())
;
});
Run Code Online (Sandbox Code Playgroud)
您的问题是您没有为 automapper 提供现有对象。Automapper 绝对可以做到这一点。
Mapper.Map<VendorContact>(vendorContact, existingStratusVendorContact);
Run Code Online (Sandbox Code Playgroud)
应该做你想做的。您当前的代码正在创建一个全新的对象,并替换existingStratusVendorContact为全新的对象。上面的代码将按照您的预期获取现有对象并更新值。