4

我正在使用AutoMapper将我的 Linq-To-SQL 生成的实体映射到 DTO 。

当我最初创建单元测试时,我设置了特定的映射(通过静态配置类)以将一种类型的 EntitySet 转换为通用列表(反之亦然)

Mapper.CreateMap<EntitySet<Member>, List<MemberDTO>>(); 
Mapper.CreateMap<List<MemberDTO>, EntitySet<Member>>(); 

删除列表转换后(在确定 AutoMapper 将自动转换这些转换后),我的单元测试仍然有效,但它们慢到了爬行。它非常慢,每次测试都需要一分钟。

重新添加列表映射后,单元测试恢复了正常的性能速度。

有没有办法关闭列表的自动转换,以便我必须映射我的列表转换?如果我未能包含地图,我希望它抛出 AutoMapperException。我想避免这些性能问题。

如果情况变得更糟,我可能最终会编写一个快速代码生成模板来自动创建基于 DTO 的映射配置类。这样,我就不会错过任何东西。

谢谢。

4

2 回答 2

1

任何 CreateMap 调用都不需要在每个 AppDomain 中多次发生,包括测试和生产代码。我们有我们的静态方法,双重检查锁定以确保配置只发生一次。配置是静态缓存的,因此无需多次执行。

但是,这些转换应该“正常工作”,假设您设置了 Member -> MemberDTO,反之亦然。我将为 List<> -> EntitySet<> 运行几个冒烟测试,以确保它工作正常。

于 2009-09-18T01:02:57.263 回答
0

事实证明,您不能只关闭自动转换。我几乎到处都看过,似乎没有真正的方法可以做到这一点。

与此同时,我正在手写所有的映射。

于 2009-10-01T15:00:31.123 回答