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 }
    });
});

最佳答案

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

关于c# - Automapper DynamicMap随机无法映射匿名类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21193852/

10-12 02:37