定义 CreateProjection 和 CreateMap

Tha*_*dis 4 c# automapper .net-6.0

在我的项目中,我使用实体框架进行 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
Run Code Online (Sandbox Code Playgroud)

这应该足以让 Automapper 理解,当我使用 ProjectTo 时,我想要投影映射,当我使用 Map 时,我想要实例映射。

但是,相反,当我有一个物化UserSession对象(在实体框架中注册的类型),并且想要将其映射到一个Models.UserSession对象(我的 Dto)时,我会得到此响应。

CreateProjection works with ProjectTo, not with Map.
Run Code Online (Sandbox Code Playgroud)

那么,如何在 Automapper 中注册相同类型的地图和投影呢?

Luc*_*anu 6

在这种情况下你必须使用CreateMap. CreateProjection明确禁用Map. CreateMap允许两者。