在我的项目中,我使用实体框架进行 ORM,使用 Dto 类进行 api 响应。我使用 Automapper 在两者之间进行映射。
当我需要直接从 EF 可查询中获取 Dtos 时,我会执行最后的操作ProjectTo<>
根据我的查询,一切都很好。
但很多时候,我有一个来自实体框架的已物化对象,我需要将其映射到其 Dto 等效项。在这种情况下我使用Map<>
代替ProjectTo<>
因为我在内存中有一个实例,而不是转换为 SQL 的 IQueryable。
当我创建 Automapper 配置文件时,我已经注册了投影和地图,如下所示:
CreateMap<UserSession, Models.UserSession>(); // used when mapping between instances
CreateProjection<UserSession, Models.UserSession>(); // used when mapping on EF LINQ expressions
这应该足以让 Automapper 理解,当我使用 ProjectTo 时,我想要投影映射,当我使用 Map 时,我想要实例映射。
但是,相反,当我有一个具体化的UserSession
对象(在实体框架中注册的类型),并希望将其映射到Models.UserSession
对象(我的 Dto)我得到这个响应。
CreateProjection works with ProjectTo, not with Map.
那么,如何在 Automapper 中注册相同类型的地图和投影呢?