我对AutoMapper有一个奇怪的问题。
如果我执行以下操作
//Get my entities from EF repository
var movements = _movementRepository.AllIncluding(movement => movement.Asset, movement => movement.Job,movement => movement.Asset.MinorEquipmentType);
var model = new List<AssetMovementDetail>();
foreach (var assetMovementDetail in movements)
{
model.Add(Mapper.Map<AssetMovementDetail>(assetMovementDetail));
}
这很有效,如果我期待的话会给我结果。
如果可选择的话我改变模型生成如下:
var model = Mapper.Map<List<AssetMovementDetail>>(movements);
结果不同,结果总数相同,但许多结果彼此重复,而其他结果则缺失。难道我做错了什么?这不是它应该如何工作。
答案 0 :(得分:1)
您需要将列表映射到列表,而不是自动从一个列表中获取映射... 因此,毫无疑问的berhaviour。 要了解我的意思,请查看此帖子:Mapping Lists using Automapper
修改强>
也许你有同样的问题在那里得到解答? Extra iterations in a foreach in an AutoMapper map。请看一下,也许它会解决,或者给你一些想法?
它也可能与您的初始linq语句中的 lazy(延迟)加载有关。
修改2
以下是我自己的项目中的代码,它成功完成了您的尝试:
var dbResources = _db.GetResourcesForBusiness();
var vmResources = Mapper.Map<IEnumerable<DBResource>, IEnumerable<VMResource>>(dbResources);
与你正在使用的相比,它的一次性交易的格式有点不同,尝试使用它,看看它是否适合你。
希望这有帮助!