Looking for dapper Keywords? Try Ask4Keywords

Dapper.NET Proste mapowanie wielu tabel


Przykład

Powiedzmy, że mamy zapytanie o pozostałych jeźdźców, którzy muszą zapełnić klasę Person.

Nazwa Urodzony Rezydencja
Daniel Dennett 1942 r Stany Zjednoczone Ameryki
Sam Harris 1967 Stany Zjednoczone Ameryki
Richard dawkins 1941 Zjednoczone Królestwo
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; }
}

Możemy wypełnić klasę osoby, a także właściwość Rezydencji wystąpieniem Country, używając Query<> przeciążeniowego Query<> które pobiera Func<> którego można użyć do utworzenia zwróconej instancji. Func<> może przyjmować do 7 typów danych wejściowych, przy czym ostateczny ogólny argument zawsze jest typem zwracanym.

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");

Zwróć uwagę na użycie argumentu splitOn: "Residence" który jest pierwszą kolumną następnego typu klasy, który należy wypełnić (w tym przypadku Country ). Dapper automatycznie wyszuka kolumnę o nazwie Id do podziału, ale jeśli jej nie znajdzie, a splitOn nie zostanie udostępniony System.ArgumentException zostanie wygenerowany z pomocnym komunikatem. Więc chociaż jest to opcjonalne, zwykle będziesz musiał podać wartość splitOn .