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; }
}

我們可以使用一個帶有Func<>的重載Query<>來填充person類和Residence屬性,並使用一個可以用來組成返回實例的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"參數,它是要填充的下一個類類型的第一列(在本例中為Country )。 Dapper將自動查找名為Id的列以進行拆分,但如果找不到並且未提供splitOn則會拋出System.ArgumentException並顯示有用的消息。因此,雖然它是可選的,但您通常必須提供splitOn值。