我的一种自动映射配置有问题,我似乎无法解决。

我有一个contact类型的实体,我正在尝试将这些列表映射到字典。但是,映射只是不执行任何操作。源词典保持为空。谁能提供任何建议?

下面是联系人类型的简化版本

public class Contact
{
    public Guid Id { get; set ;}
    public string FullName { get; set; }
}


我的自动映射配置如下

Mapper.CreateMap<Contact, KeyValuePair<Guid, string>>()
    .ConstructUsing(x => new KeyValuePair<Guid, string>(x.Id, x.FullName));


我的调用代码如下

var contacts = ContactRepository.GetAll(); // Returns IList<Contact>
var options = new Dictionary<Guid, string>();
Mapper.Map(contacts, options);

最佳答案

AutoMapper网站上的文档非常粗略。据我所知,Mapper.Map中的第二个参数仅用于确定返回值应为哪种类型,而实际上并未修改。这是因为它允许您基于现有对象执行动态映射,该对象的类型仅在运行时才知道,而无需在泛型中硬编码类型。

因此,代码中的问题是您没有使用Mapper.Map的返回值,该返回值实际上包含最终转换后的对象。这是经过测试的代码的修改版本,可以按预期正确返回转换后的对象。

var contacts = ContactRepository.GetAll();
var options = Mapper.Map(contacts, new Dictionary<Guid, string>());
// options should now contain the mapped version of contacts


尽管利用通用版本而不是构造不必要的对象(仅用于指定类型)会更有效:

var options = Mapper.Map<List<Contact>, Dictionary<Guid, string>>(contacts);


这是可以在LinqPad中运行的working code sample(运行该示例需要对AutoMapper.dll的程序集引用。)

希望这可以帮助!

关于c# - AutoMapper问题将实体映射到Dictionary <Guid,string>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6713257/

10-09 23:43
查看更多