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/