Dapper.NET Mappage multi-tables simple


Exemple

Disons que nous avons une interrogation des cavaliers restants qui doivent remplir une classe de personnes.

prénom Née Résidence
Daniel Dennett 1942 les États-Unis d'Amérique
Sam Harris 1967 les États-Unis d'Amérique
Richard dawkins 1941 Royaume-Uni
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; }
}

Nous pouvons remplir la classe de personne ainsi que la propriété Residence avec une instance de Country à l'aide d'une Query<> surcharge Query<> qui prend un Func<> pouvant être utilisé pour composer l'instance renvoyée. Le Func<> peut prendre jusqu'à 7 types d'entrées, l'argument générique final étant toujours le type de retour.

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

Notez l'utilisation de l' splitOn: "Residence" qui est la 1ère colonne du prochain type de classe à renseigner (dans ce cas, Country ). Dapper recherchera automatiquement une colonne appelée Id à diviser mais si elle n'en trouve pas et que splitOn n'est pas fourni, une System.ArgumentException sera lancée avec un message utile. Donc, bien que ce soit facultatif, vous devrez généralement fournir une valeur splitOn .