使用自动映射器和下划线进行映射
本文关键字:映射 下划线 | 更新日期: 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!
}