AutoMapper: отображение между IDataReader и DTO-объектом

У меня есть DataReader, который содержит результат хранимой процедуры. Соглашение об именах для столбцов использует подчеркивания для пробелов.

Мне удалось успешно отобразить между IDataReader и IEnumerable, но только если поля совпадают точно. Я не хочу, чтобы соглашение об именах, используемое в хранимых процедурах, указывало, как я называю поля в своих объектах. И то же самое верно и в отношении базы данных. Я не думаю, что мне удастся навязать дело Паскаля администраторам баз данных.

Я хотел бы избежать использования поля ForMember () foreach, которое мне нужно отобразить. Это победило бы цель использования AutoMapper.

Я нашелпредыдущий пост на тему, которую я использовал в качестве ссылки в моих тестах. Мне не удалось получить правильную конфигурацию / отображение для успешного прохождения теста. Я надеюсь, что кто-то может помочь.

public class DataReaderTests
{
    private DTOObject _result;
    private IDataReader _dataReader;

    protected override void Establish_context()
    {
        Mapper.Initialize(cfg =>
        {
            cfg.SourceMemberNamingConvention = new LowerUnderscoreNamingConvention();
            cfg.DestinationMemberNamingConvention = new PascalCaseNamingConvention();
            cfg.CreateMap();
        });

        _dataReader = new DataBuilder().BuildDataReader();
        _result = Mapper.Map(_dataReader).FirstOrDefault();
    }

    [Test]
    public void Then_a_column_containing_phone_number_should_be_read()
    {
        Assert.That(_result.PhoneNumber, Is.EqualTo(_dataReader[FieldName.PhoneNumber]));
    }
}

public class DataBuilder
{
    public IDataReader BuildDataReader()
    {
        var resultData = new DataTable();    
        resultData.Columns.Add(FieldName.PhoneNumber, typeof(string));

        var resultDataRow = resultData.NewRow();
        resultDataRow[FieldName.PhoneNumber] = "111-222-3333";

        resultData.Rows.Add(resultDataRow);

        return resultData.CreateDataReader();
    }
}

internal class FieldName
{
    public const String Id = "id";
    public const String Name = "name";
    public const String PhoneNumber = "phone_number";
    public const String CreateDate = "create_date";   
}

public class DTOObject
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string PhoneNumber { get; set; }
    public DateTime CreatedDate { get; set; }
}

Ответы на вопрос(2)

Ваш ответ на вопрос