如果我直接从IEnumerable映射到IEnumerable,为什么我会得到奇怪的AutoMapped结果?

时间:2012-09-27 13:29:40

标签: asp.net-mvc automapper automapper-2

我对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);

结果不同,结果总数相同,但许多结果彼此重复,而其他结果则缺失。难道我做错了什么?这不是它应该如何工作。

1 个答案:

答案 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);
与你正在使用的相比,它的一次性交易的格式有点不同,尝试使用它,看看它是否适合你。

希望这有帮助!