我可以强制Automapper按特定顺序初始化属性吗

本文关键字:定顺序 初始化 属性 Automapper 我可以 | 更新日期: 2023-09-27 18:00:07

我使用Automapper和Queryable Extensions将一些(类似的)模型投影到同一个DTO中,以便连接和排序它们以便在DB服务器上进行分页(通过实体框架),而在分页之前不返回数据。

        var tasksType1 = context.TasksType1.Project().To<MyDto>();
        var tasksType2 = context.TasksType2.Project().To<MyDto>();
        var allTasks = tasksType1.Concat(tasksType2);
        return allTasks.ToMyPagedList()

这很好,只是现在我的模型变得稍微复杂了一点,Automapper似乎每次都以稍微不同的顺序初始化投影,这导致了错误:

类型"AngularJSAuthentication.neneneba API.Dtos.ActivityDashboard.ActivityDashboardDto2"出现在单个LINQ to Entities查询中的两个结构不兼容的初始化中。类型可以在同一查询中的两个位置初始化,但前提是在两个位置都设置了相同的属性,并且这些属性的设置顺序相同。

是否有任何方法可以强制Automapper以可控的方式初始化投影?我已经设置了映射,以便使用.ForMember和.MapFrom以完全相同的顺序为这两种类型定义每个属性,但即使这样似乎也不能做到,而且从创建的SQL来看,它似乎也与初始模型中的属性顺序无关。

如有任何建议,不胜感激!

我可以强制Automapper按特定顺序初始化属性吗

我会修改这个查询,将两者连接在一起,然后应用投影:

    var tasksType1 = context.TasksType1;
    var tasksType2 = context.TasksType2;
    var allTasks = tasksType1.Concat(tasksType2);
    return allTasks.ProjectTo<MyDto>().ToMyPagedList()

LINQ提供程序可能无法处理投影和连接的复杂性,但可能能够处理相反的问题。

一般来说,使用AutoMapper,我会尝试将投影作为过程中的最后一步。