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值。