我是 AutoMapper 的新手并使用 6.2.2 版。我正在尝试将视图模型映射到实体(也使用实体框架)。我只想更新视图模型和实体中存在的属性。该实体具有不属于源视图模型的其他导航属性和相关对象。我目前收到一个错误,表明我在目标实体上有未映射的属性。我的视图模型和实体都有超过 40 个属性,所以我不想明确地将每个属性添加到地图中。
这是我的代码:
地图:
public static void RegisterMaps()
{
AutoMapper.Mapper.Initialize(config =>
{
config.CreateMap<EditApplicationViewModel, Application>();
});
}
我也尝试了以下但得到同样的错误:
config.CreateMap<EditApplicationViewModel, Application>(MemberList.source);
控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(EditApplicationViewModel viewModel)
{
if (ModelState.IsValid)
{
Application application = _applicationService.GetById(viewModel.ApplicationId);
application = Mapper.Map(viewModel, application);
}
}
错误信息:
InnerException:HResult=-2146233088 消息=找到未映射的成员。查看下面的类型和成员。添加自定义映射表达式、忽略、添加自定义解析器或修改源/目标类型对于没有匹配的构造函数,添加无参数 ctor、添加可选参数或映射所有构造函数参数 ======= ==================================================== = 字符串 -> 用户(目标成员列表) System.String -> 。.***.entities.User(目标成员列表)
未映射的属性:已删除 - 目标上的相关对象和属性列表很长
Source=AutoMapper StackTrace: at lambda_method(Closure , EditApplicationViewModel , Application , ResolutionContext )
更新:
我也试过下面的地图。我没有收到任何错误,但没有在目标上更新任何源属性。
config.CreateMap<EditApplicationViewModel, Application>().ForAllOtherMembers(opts=>opts.Ignore());