我继承了一个使用AutoMapper的MVC 3项目。它似乎只使用默认的Automapper配置(换句话说,我无法在解决方案的任何地方找到Automapper的任何其他配置)。所以我已经为我添加到项目中的两个新模型编写了这样的代码:
Mapper.CreateMap<Entities.Document, Models.Attachment>();
Mapper.AssertConfigurationIsValid();
return Mapper.Map <List<Entities.Document>, List<Models.Attachment>>(Attachments);
哪个应该可以正常工作 - 但问题是Automapper因为无法映射完全不相关的对象而失败。换句话说,我在调用Mapper.Map时收到此消息:
The following 2 properties on MyApp.Models.User are not mapped:
IsAdminUser
SubRoleList
Add a custom mapping expression, ignore, or rename the property on
MyApp.Entities.UserProfile.
当Models.User与我正在映射的模型无关时,为什么映射失败?他们不会继承它。它们不包含任何引用。我的新模型是非常简单的模型,包含一些字符串和整数。 MyApp.Models.User也不依赖于它们。
我意识到可以通过在AutoMapper调用中指定映射来解决此问题。事实上,我已经这样做了,它解决了这个问题。所以我并不担心。我可以继续前进。我担心的是,当我尝试使用默认映射时,我无法弄清楚为什么我会收到此消息。应用程序中还有许多其他对象与我正在尝试映射的新对象非常相似。当调用上面的代码时,它们都能完美地工作。它们不需要指定任何映射,并且它们没有MyApp.Models.User的问题。我只是想知道为什么会这样,因为我想了解它。有人有想法吗?如果不是很明显,我对MVC和Automapper相对较新。谢谢。 :)
编辑:补充信息:
如果我在调用CreateMap()之前添加对Mapper.Reset()的调用,一切都很完美。我仍然不明白为什么我的方法是应用程序中唯一需要先重置的方法。