0

在下面的示例中,我只是想让 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() 调用并不理想,但如果没有其他选择,我会这样做。

4

1 回答 1

0

一种方法是简单地从类的PublicNameFirstName属性中省略“Test_Person_” TestPersonFlattened,并使用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!
}
于 2013-10-16T22:24:03.093 回答