Looking for dapper Keywords? Try Ask4Keywords

Dapper.NET Einfaches Multi-Table-Mapping


Beispiel

Nehmen wir an, wir haben eine Abfrage der verbleibenden Reiter, die eine Person-Klasse füllen müssen.

Name Geboren Residenz
Daniel Dennett 1942 vereinigte Staaten von Amerika
Sam Harris 1967 vereinigte Staaten von Amerika
Richard Dawkins 1941 Großbritannien
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; }
}

Wir können sowohl die Personenklasse als auch die Residence-Eigenschaft mit einer Instanz von Country mit einer Überlast- Query<> Func<> , die eine Func<> verwendet, die zum Func<> der zurückgegebenen Instanz verwendet werden kann. Die Func<> kann bis zu 7 Eingabetypen aufnehmen, wobei das generische Argument immer der Rückgabetyp ist.

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

Beachten Sie die Verwendung des Arguments splitOn: "Residence" , bei dem es sich um die 1. Spalte der nächsten zu splitOn: "Residence" Klassentypen handelt (in diesem Fall Country ). Dapper sucht automatisch nach einer Spalte mit dem Namen " Id", nach der aufgeteilt werden soll. Wenn jedoch keine splitOn wird und splitOn nicht System.ArgumentException wird, wird eine System.ArgumentException mit einer hilfreichen Nachricht ausgelöst. Obwohl es optional ist, müssen Sie normalerweise einen splitOn Wert splitOn .