Looking for dapper Keywords? Try Ask4Keywords

Dapper.NET Простое отображение нескольких таблиц


пример

Предположим, у нас есть запрос оставшихся всадников, которым необходимо заполнить класс Person.

название Родившийся Резиденция
Даниэль Деннетт 1942 Соединенные Штаты Америки
Сэм Харрис 1967 Соединенные Штаты Америки
Ричард Докинз 1941 Объединенное Королевство
public class Person
{
    public string Name { get; set; }
    public int Born { get; set; }
    public Country Residience { get; set; }
}

public class Country
{
    public string Residence { get; set; }
}

Мы можем заполнить класс person, а также свойство Residence экземпляром страны, используя перегруженный Query<> который принимает Func<> который может использоваться для компоновки возвращаемого экземпляра. Func<> может принимать до 7 типов ввода с окончательным общим аргументом, всегда являющимся типом возврата.

var sql = @"SELECT 'Daniel Dennett' AS Name, 1942 AS Born, 'United States of America' AS Residence
UNION ALL SELECT 'Sam Harris' AS Name, 1967 AS Born, 'United States of America' AS Residence
UNION ALL SELECT 'Richard Dawkins' AS Name, 1941 AS Born, 'United Kingdom' AS Residence";

var result = connection.Query<Person, Country, Person>(sql, (person, country) => {
        if(country == null)
        {
            country = new Country { Residence = "" };
        }
        person.Residience = country;
        return person;
    }, 
    splitOn: "Residence");

Обратите внимание на использование splitOn: "Residence" который является 1-м столбцом следующего типа класса, который будет заполнен (в данном случае Country ). Dapper автоматически ищет столбец с именем Id для разделения, но если он не найдет его, а splitOn не будет предоставлен, System.ArgumentException будет splitOn полезным сообщением. Поэтому, хотя это необязательно, вам обычно нужно предоставить значение splitOn .