AutoMapper ProjectUsing 未被调用

AutoMapper ProjectUsing not being called

我正在尝试通过 LINQ 表达式将 AutoMapper 的 ProjectUsing 功能仅用于 select 我需要的列,但似乎表达式本身不会在 运行 时被调用或通过单元测试。

作为测试,我只是将一个固定值放入 AlternateId 属性,但下面的断言总是失败。这对于单个实例(不在可查询列表中)和在 运行 时间通过 Entity Framework 6.

也会失败
    class MapFrom
    {
        public int Id { get; set; }
    }
    class MapTo
    {
        public int AlternateId { get; set; }
    }

    [TestMethod]
    public void Automapper_projectusing_test()
    {
        AutoMapper
            .Mapper
            .CreateMap<MapFrom, MapTo>()
            .ProjectUsing(src => new MapTo { AlternateId = 88 });
        var products = new List<MapFrom>();
        products.Add(new MapFrom());

        var mapped = products
            .AsQueryable()    // Just in case ProjectUsing only works with IQueryable.
            .Project()
            .To<MapTo>()
            .ToList();

        Assert.AreEqual(88, mapped.Single().AlternateId); // Fails, AlternateId equals 0.
    }

使用 AutoMapper v3.3.1,NC运行ch 确认从未执行映射表达式代码。

为什么 AutoMapper 不执行这个表达式,也许我错过了一个关键步骤?

我正在尝试做同样的事情并遇到了这个问题,但也无法解决。我下载了 Automapper 源代码并查看了相关测试。

    public ProjectEnumTest()
    {
        Mapper.CreateMap<Customer, CustomerDto>();
        Mapper.CreateMap<CustomerType, string>().ProjectUsing(ct => ct.ToString().ToUpper());
    }

    [Fact]
    public void ProjectingEnumToString()
    {
        var customers = new[] { new Customer() { FirstName = "Bill", LastName = "White", CustomerType = CustomerType.Vip } }.AsQueryable();

        var projected = customers.Project().To<CustomerDto>();
        projected.ShouldNotBeNull();
        Assert.Equal(customers.Single().CustomerType.ToString().ToUpper(), projected.Single().CustomerType);
    }

简短的回答是这似乎只适用于成员级别的映射,而不适用于第一个 class 级别的映射?用下面的映射替换是行不通的。投影值只是一个具有空属性的 CustomerDto 对象。

 Mapper.CreateMap<Customer, CustomerDto>().ProjectUsing(c => new CustomerDto{FirstName = "Test"});

来自此处列出的文章:http://lostechies.com/jimmybogard/2014/12/23/automapper-3-3-feature-projection-conversions/ 我假设上述功能可能是有意的,但不起作用。要么,要么我们对它的工作原理的理解存在配置问题。

根据吉米博加德 'This works as designed, you want ConstructUsing.'。看 https://github.com/AutoMapper/AutoMapper/issues/677#event-289561571

显然它让我们所有人都感到困惑,所以我认为这里的文档可能更清楚。