使用自动映射器和下划线进行映射

本文关键字:映射 下划线 | 更新日期: 2023-09-27 18:35:45

在下面的例子中,我只是想让Test_Person_Name.FirstName映射到TestPersonFlattened中的某些东西(任何东西)。在这一点上,考虑到我沉浸其中的时间,我不太挂在目标属性名称上。我只是想让它工作。

public class Test_Person
{
    public Test_Person_Name Test_Person_PublicName { get; set; }
}
public class Test_Person_Name
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
public class TestPersonFlattened
{
    public string Test_Person_PublicNameFirstName { get; set; } // What do I call this property?
}
AutoMapper.Mapper.CreateMap<Test_Person, TestPersonFlattened>();
AutoMapper.Mapper.AssertConfigurationIsValid();

似乎Test_Person_PublicNameFirstName应该可以工作,但是我在AssertConfigurationIsValid()上得到了一个例外。我还尝试了TestPersonPublicNameFirstName,Test_Person_PublicName_FirstName作为目标属性名称。

重命名源属性名称是不利的,因为源库在许多其他项目中使用。另外,ForMember() 调用并不理想,但如果没有其他选择,我会这样做。

使用自动映射器和下划线进行映射

一种方法

是从TestPersonFlattened类的PublicNameFirstName属性中省略"Test_Person_",并使用RecognizePrefixes()来使AutoMapper在尝试映射属性名称时忽略"Test_Person_"。

以下代码成功:

public partial class App : Application
{
    public App()
    {
        Mapper.Initialize(cfg =>
        {
            cfg.RecognizePrefixes("Test_Person_");
            cfg.CreateMap<Test_Person, TestPersonFlattened>();
        }); 
        Mapper.CreateMap<Test_Person, TestPersonFlattened>();
        Mapper.AssertConfigurationIsValid();
    }
}
public class Test_Person
{
    public Test_Person_Name Test_Person_PublicName { get; set; }
}
public class Test_Person_Name
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
public class TestPersonFlattened
{
    public string PublicNameFirstName { get; set; } // This is what I call this property!
}