Automapper DynamicMap随机无法映射匿名类型

时间:2014-01-17 19:06:02

标签: c# automapper anonymous-types

Automapper(3.1.1)随机无法映射任何数据,这一点非常奇怪。创建对象(ProductRating)并返回,但实际上并未映射任何数据。当这种情况发生时我已经进入代码并且result变量确实包含了数据,但DynamicMap没有做到这一点。

如果我要么,打开一个视图并重新保存它(没有代码更改),或者如果我重新编译服务是下面的代码所在,它只是重新开始工作。也许是因为我以匿名类型嵌套了一个DynamicMap调用?

var result = _repo.Table.Where(a => a....)
    .Select(a => new
    {
        a.ProductRating.UserId,
        a.ProductRating.ProductId,
        a.ProductRating.Rating,
        a.ProductRating.CreatedOn,
        a.Product.Name
    }).ToList();

// automapper is failing to map any data here intermittently.
List<ProductRating> entityList = result.Select(a => Mapper.DynamicMap<ProductRating>(new
    {
        a.UserId,
        a.ProductId,
        a.Rating,
        a.CreatedOn,
        Product = Mapper.DynamicMap<Product>(new { a.ProductId, a.Name })
    })).ToList();

更新1:

我在下面运行了一些测试,似乎嵌套的DynamicMap调用不是问题。如果我重新构建我的解决方案并且最初加载像主页一样的 View 然后使用此代码导航到 View ,那么我能够一致地重现此问题,然后DynamicMap不会工作。如果我重新构建并最初加载与此代码直接关联的 View ,那么它可以正常工作。奇怪的东西。

var itemList = new List<ProductRating>();
result.ForEach(a =>
{
    // doesn't map anything
    itemList.Add(Mapper.DynamicMap<ProductRating>(new
    {
        a.UserId,
        a.ProductId,
        a.Rating,
        a.CreatedOn,
        // doesn't map either
        Product = new Product() { Name = a.Name, ProductId = a.ProductId }
        // doesn't map
        //Product = Mapper.DynamicMap<Product>(new { a.ProductId, a.Name })
    }));
    // success
    itemList.Add(new ProductRating()
    {
        UserId = a.UserId,
        ProductId = a.ProductId,
        Rating = a.Rating,
        CreatedOn = a.CreatedOn,
        Product = new Product() { Name = a.Name, ProductId = a.ProductId }
    });
});

1 个答案:

答案 0 :(得分:1)

这个问题继续出现并成为缺陷的根源。由于没有来自项目所有者的响应,并且在仔细考虑了Automapper以及ValueInjector后,我决定放弃使用所有对象到对象的映射器,只需手动新建类的实例。该决定实际上归结为不受第三方软件的支配,无法保证修复或响应时间。