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