【发布时间】:2018-10-15 01:44:23
【问题描述】:
我是 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);
}
}
错误信息:
内部异常: H结果=-2146233088 Message= 找到未映射的成员。查看下面的类型和成员。添加自定义映射表达式,忽略,添加自定义 解析器,或修改源/目标类型对于没有匹配 构造函数,添加无参数 ctor,添加可选参数,或映射所有 构造函数参数 ==================================================== ======== 字符串 -> 用户(目标成员列表) System.String -> ..***.entities.User(目标成员列表)
未映射的属性:已删除 - 相关对象的很长列表 和目的地的属性
Source=AutoMapper StackTrace: at lambda_method(Closure , EditApplicationViewModel , Application , ResolutionContext )
更新:
我也试过下面的地图。我没有收到任何错误,但没有在目标上更新任何源属性。
config.CreateMap<EditApplicationViewModel, Application>().ForAllOtherMembers(opts=>opts.Ignore());
【问题讨论】:
-
该帖子的接受答案并不能解决我的问题。因此,我不认为这是重复的帖子。情况不同,AutoMapper的版本也不同。
-
您是否尝试过来自 stackoverflow.com/questions/954480/automapper-ignore-the-rest/… 的 IgnoreUnmapped 扩展
-
@Rokal 情况有何不同? 6.2.2 > 5 并且该答案仍然有效。
-
引用的答案处理忽略所有“未映射”属性(即,如果映射未在 CreateMap 中显式声明,则忽略它,即使源和目标中的属性名称匹配。这是不是我想要做的。
标签: c# automapper automapper-6