将具有相同名称的字段映射到Automapper中的不同字段

3

我有一个模型,我试图将其从.NET Core 2.0中的Match类映射出来。两个类都有一个Name属性。

我需要将Match.Value => ViewCompany.Name进行映射。

但它总是将Match.Name放入ViewCompany.Name中。

以下是我的AutomapperProfile

CreateMap<Match, ViewCompany>()
                .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Value));

.ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Value))

意为:将 src.Value 映射到 dest.Name。

ViewCompany:

意为:“查看公司”。
public class ViewCompany
{
    public ViewCompany()
    {

    }

    public ViewCompany(string name)
    {
        this.Name = name;
    }

    public int Id { get; set; }

    public string Name { get; set; }
}

上面的映射不起作用。

但是,如果我将模型中的属性名称更改为其他内容,例如“Value”或“tempName”,并更新automapper配置文件,它就可以正常工作。

因此,在Automapper中是否不可能将具有相同名称的属性映射到不同的属性?


這對我有效,請嘗試升級。 - Lucian Bargaoanu
@LucianBargaoanu 我有最新的 Automapper.Extensions.Microsoft.DependencyInjection 6.0.0 版本。 - Sachin Parashar
很可能您的配置被忽略了,因为您没有正确设置它。请查看文档 - Lucian Bargaoanu
@LucianBargaoanu 配置看起来没问题,因为我将属性“Name”更改为“CompanyName”,并更新了配置。.ForMember(dest => dest.CompanyName, opt => opt.MapFrom(src => src.Value)) 然后它就可以工作了。 - Sachin Parashar
1个回答

3
这里发生的情况是通过构造函数Name映射。避免这种情况的简单方法是告诉AM使用哪个构造函数:
 CreateMap<Match, ViewCompany>().ConstructUsing(source=>new ViewCompany());

你说得完全正确。我刚试着在一个没有那个构造函数的新测试项目里尝试了同样的事情,它成功了。 - Sachin Parashar
其实,我不再需要那个构造函数了。所以,我将它删除了,现在一切都按预期工作了。非常感谢@Lucian。 - Sachin Parashar
Lambda表达式中的参数应该为dest,以避免混淆: ConstructUsing(dest => new ViewCompany()); - maximus
实际上不是 :) 你会收到源代码,然后你会“返回”目标代码。 - Lucian Bargaoanu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接