Asp.net mvc 3 为什么AutoMapper会因为不相关模型中的映射而失败?

Asp.net mvc 3 为什么AutoMapper会因为不相关模型中的映射而失败?,asp.net-mvc-3,automapper,Asp.net Mvc 3,Automapper,我继承了一个使用AutoMapper的MVC3项目。它似乎只使用默认的Automapper配置,换句话说,在解决方案中的任何地方,我都找不到Automapper的任何其他配置。因此,我为添加到项目中的两个新模型编写了如下代码: Mapper.CreateMap<Entities.Document, Models.Attachment>(); Mapper.AssertConfigurationIsValid(); return Mapper.Map <List<Entit

我继承了一个使用AutoMapper的MVC3项目。它似乎只使用默认的Automapper配置,换句话说,在解决方案中的任何地方,我都找不到Automapper的任何其他配置。因此,我为添加到项目中的两个新模型编写了如下代码:

Mapper.CreateMap<Entities.Document, Models.Attachment>();
Mapper.AssertConfigurationIsValid();
return Mapper.Map <List<Entities.Document>, List<Models.Attachment>>(Attachments);
为什么映射失败时模型。用户与我映射的模型无关?他们不是从中继承的。它们不包含对它的任何引用。我的新模型是非常简单的模型,包含一些字符串和int。MyApp.Models.User也不依赖它们做任何事情

我意识到这个问题可以通过在AutoMapper调用中指定映射来解决。事实上,我已经这样做了,它解决了问题。所以我不担心这个。我可以继续前进。我担心的是,当我尝试使用默认映射时,我始终无法理解为什么会收到此消息。应用程序中还有许多其他对象与我尝试映射的新对象非常相似。当调用上述代码时,它们都能完美地工作。它们不需要指定任何映射,并且与MyApp.Models.User没有任何问题。我只是想知道为什么会发生这种情况,因为我想了解它。有人有主意吗?如果不是很明显,我对MVC和Automapper还比较陌生。谢谢

编辑:其他信息:


如果我在调用CreateMap之前添加对Mapper.Reset的调用,那么一切都会正常工作。我仍然不明白为什么我的方法是应用程序中唯一需要先重置的方法

在应用程序的整个生命周期中,只应调用Mapper.CreateMap方法一次。最好是在应用程序内部启动。为什么每次映射之前都要重新定义映射?只是因为在我继承的整个应用程序中都是这样做的。我真正想理解的是,为什么这种逻辑在其他地方都适用,但在我尝试时却不行。沿着这条路,我可以考虑重新架构所有这些,但是这超出了我目前正在研究的范围。这个错误的原因可能是因为你们可能同时请求它们中的每一个不断地修改映射规则,这不是AutoMapper打算使用的方式。您定义了一次映射规则,并且多次使用映射方法。谢谢您的评论。我知道你在说什么,但我是唯一一个使用该应用程序的人,并且在调试模式下,仔细地浏览代码。我不认为还有其他的要求。这与其说是‘这是对的吗?’的问题,不如说是‘为什么它在其他地方都有效,而不是在这里?’。我想了解这一点。
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.