Looking for dapper Keywords? Try Ask4Keywords

Dapper.NET Enkel kartläggning av flera bord


Exempel

Låt oss säga att vi har en fråga om de återstående ryttarna som behöver fylla en personklass.

namn Född Bostad
Daniel Dennett 1942 Amerikas förenta stater
Sam Harris 1967 Amerikas förenta stater
Richard Dawkins 1941 Storbritannien
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; }
}

Vi kan fylla såväl personklassen som bostadsfastigheten med en instans av land med hjälp av en överbelastningsfråga Query<> som tar en Func<> som kan användas för att komponera den returnerade instansen. Func<> kan ta upp till sju ingångstyper med det slutliga generiska argumentet som alltid är returtypen.

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

Notera användningen av splitOn: "Residence" -argumentet som är den första kolumnen i nästa klasstyp som ska fyllas (i detta fall Country ). Dapper letar automatiskt efter en kolumn som heter Id att dela på men om den inte hittar en och splitOn inte tillhandahålls ett System.ArgumentException kastas med ett användbart meddelande. Så även om det är valfritt måste du vanligtvis splitOn ett splitOn värde.