相关疑难解决方法(0)

410
推荐指数
10
解决办法
17万
查看次数

定义 CreateProjection 和 CreateMap

在我的项目中,我使用实体框架进行 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 中注册相同类型的地图和投影呢?

c# automapper .net-6.0

4
推荐指数
1
解决办法
2088
查看次数

未调用 AutoMapper ConvertUsing

我有一个简单的任务:只需将一个类映射到另一个类。对于某些字段,我有复杂的逻辑,取决于 2 个或更多字段,因此,我尝试使用ConvertUsinghttps://docs.automapper.org/en/stable/Custom-type-converters.html

我使用 AutoMapper 10.0.0

我的代码是:

源码类:

public class DeviceStatusHistory
{
    public DeviceStatusHistory()
    {
        DateChange = DateTime.UtcNow;
    }

    public int Id { get; set; }
    public int DeviceId { get; set; }
    public virtual Device Device { get; set; }

    public int? RequestId { get; set; }
    public virtual DeviceManagementRequest Request { get; set; }

    public DeviceStatus OldStatus { get; set; }
    public DeviceStatus NewStatus { get; set; }
    public string Notes { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# automapper

1
推荐指数
1
解决办法
1111
查看次数

标签 统计

automapper ×2

c# ×2

.net ×1

.net-3.5 ×1

.net-6.0 ×1

ienumerable ×1

iqueryable ×1

linq ×1