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

时间:2016-08-04 12:50:41

标签: c# entity-framework linq automapper

我使用Automapper和Queryable Extensions将一些(类似的)模型投影到同一个DTO中,以便在数据库服务器上(通过实体框架)连接和排序它们,而不返回数据,直到它为止寻呼。

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

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

  

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

有没有办法强制Automapper以可控方式初始化投影?我已经设置了映射来使用.ForMember和.MapFrom来定义每个属性,两种类型的顺序完全相同,但即使这样做也没有,并且查看创建的SQL,它没有&# 39;似乎与初始模型中的属性顺序有任何关系。

感激不尽的任何建议!

1 个答案:

答案 0 :(得分:0)

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

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

LINQ提供程序可能无法处理投影的复杂性然后处理连接,但可能能够处理相反的情况。

一般情况下,对于AutoMapper,我尝试将投影作为整个过程中的最后一步。