В настоящее время я использую Entity Framework для доступа к базе данных, но хочу взглянуть на Dapper. У меня есть такие классы:
public class Course{
public string Title{get;set;}
public IList<Location> Locations {get;set;}
...
}
public class Location{
public string Name {get;set;}
...
}
Таким образом, один курс можно преподавать в нескольких местах. Entity Framework выполняет сопоставление за меня, поэтому мой объект Course заполняется списком местоположений. Как мне сделать это с помощью Dapper, возможно ли это или мне нужно сделать это в несколько этапов запроса?
Ответы:
Dapper - это не полноценный ORM, он не обрабатывает волшебную генерацию запросов и тому подобное.
Для вашего конкретного примера, вероятно, сработает следующее:
Возьмите курсы:
Возьмите соответствующее отображение:
Захватите соответствующие места
Сопоставьте все это
Предоставляя это читателю, вы создаете несколько карт и повторяете свои курсы, заполняя их местоположениями.
Протест
in
трюк будет работать , если у вас меньше , чем 2100 просмотры (SQL Server), если у вас есть больше , вы , вероятно , хотите изменить запрос,select * from CourseLocations where CourseId in (select Id from Courses ... )
если это так , вы можете также дергать все результаты на одном дыхании , используяQueryMultiple
источник
Как вариант, вы можете использовать один запрос с поиском:
См. Здесь https://www.tritac.com/blog/dappernet-by-example/
источник
Нет необходимости в
lookup
словареисточник
Я знаю, что очень опаздываю, но есть другой вариант. Здесь вы можете использовать QueryMultiple. Что-то вроде этого:
источник
Извините за опоздание на вечеринку (как всегда). Для меня проще использовать a
Dictionary
, как это сделал Jeroen K , с точки зрения производительности и удобочитаемости. Кроме того, чтобы избежать умножения заголовков в разных местах , я используюDistinct()
для удаления потенциальных дубликатов:источник
Что-то пропало. Если вы не укажете каждое поле из
Locations
в запросе SQL, объектLocation
не может быть заполнен. Взглянуть:Используя
l.*
в запросе, у меня был список локаций, но без данных.источник
Не уверен, что это кому-то нужно, но у меня есть динамическая версия без модели для быстрого и гибкого кодирования.
источник