Automapper и IDataReader

233
18 января 2018, 17:53

Доброго времени суток! У меня возник такой вопрос. Допустим у меня есть бд, в которой есть таблицы вида:

CREATE TABLE Foo
(
   Id int,
   Name nvarchar(100),
   BarId int
)
CREATE TABLE Bar
(
    Id int,
    Text nvarchar(100)
)

Причем столбец BarId в таблице Foo - это foreign key на Bar.Id. Затем я запрос вида

SELECT f., b.Id as BarId, b.Name as BarName
FROM Foo f
JOIN Bar b ON b.Id = f.BarId

Результаты этого запроса я получаю в IDataReader. Для их отображения у меня есть классы

public class Foo
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Bar Bar { get; set; }
}
public class Bar
{
    public int Id { get; set; }
    public string Text { get; set; }
}

Для получения данных из ридера я использую Automapper. Вот так:

public class DataReaderConverter<TDto> : ITypeConverter<IDataReader, TDto> where TDto : new
{
    // код этого метода немного упрощен, но в целом всё так и работает
    public TDto Convert(IDataReader source, TDto destination, ResolutionContext context)
    {
        if (destination == null)
            destination = new TDto();
        typeof(TDto).GetProperties().ToList()
            .ForEach(property => property.SetValue(destination, source[property.Name]));
    }
}

cfg.CreateMap<IDataReader, Foo>().ConvertUsing(new DataReaderConverter<Foo>());

И тут возникает проблема. Дело в том, что если запрос обычный, без джойнов, то DataReaderConverter вполне успешно всё маппит. Но в моём запросе есть джойн с таблицей Bar, и я не могу сопоставить свойство Bar со столбцами BarId и BarName, Есть ли какая-то возможность заставить Automapper понимать, как нужно маппить свойства-классы из столбцов ридера?

READ ALSO
Отправить POST запрос

Отправить POST запрос

Нужно отправить POST запрос с параметрами и прочитать html в ответеВот мой метод :

207
Мониторинг ресурсов сети

Мониторинг ресурсов сети

Нужно сделать программу которая показывает: на сколько каждый процесс использует сеть и на какой ИП он отправляет данныеТак сказать аналог...

202
Поиск по DataGrid из внутренних TextBox/ComboBox. Mvvm - C# WPF/.NET 4.x

Поиск по DataGrid из внутренних TextBox/ComboBox. Mvvm - C# WPF/.NET 4.x

Доброго дня всем! Очень интересует как поместить внутрь DataGrid несколько TextBox'ов или ComboBox'ов, что бы по ним совершать поиск по строкам или запрос...

220