Наследование и Dapper.net

dapper

Вопрос

Я решил использовать Dapper.net, потому что, похоже, он делает только то, что я хочу: сопоставление, мне не нужно ничего фантастического, мне просто надоело обрабатывать сопоставление между моим datareader и моим объектом.

Моя проблема :

Допустим, у меня есть класс:

class Foo{
int ID;
string Name;
}
class Bar : Foo{
string FavoriteMoovie;
}

И эти таблицы:

Foo 
- ID
- Name

Bar
- FooID
- FavoriteMoovie

Поэтому я хотел бы знать, как я могу выбрать Foo и Bars в том же запросе?

Моя единственная идея до сих пор

  • ВЫБЕРИТЕ все фоны, которые не являются барами
  • затем ВЫБЕРИТЕ все бары

Я не могу использовать перегрузку метода «Запрос», потому что здесь есть только отношения отображения.

Популярные ответы

Очень хакерский, но это, вероятно, работает.

db.Query<Bar, object, Foo>("select * from Foo left join Bar on FooID = ID",
 (bar,ignore) => 
   bar.FavoriteMoovie == null ? bar : new Foo{ID = bar.ID, Name = bar.Name});

Недостаток в том, что он создает пару промежуточных объектов, без которых он может обойтись.

Другие варианты - просто выбрать объекты Bar и затем использовать тот же трюк, чтобы отфильтровать Foos или выбрать динамический, а затем преобразовать в правильный класс.

Лично я не стал бы запрашивать дважды, просто чтобы справиться с этим, если только вы не разрешите NULL FavoriteMoovie, и в этом случае у вас нет выбора, кроме как усложнить запрос или выбрать дважды.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему