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; }
}
我们可以使用重载(使用可以用来组成返回的实例)的重载Query<>,用Country的实例填充person类以及Residence属性Func<>。在Func<>可能需要长达7种输入类型与最终的一般的参数始终是返回类型。
var sql = @"SELECT 'Daniel Dennett' AS Name, 1942 AS Born, 'United States of America' AS ResidenceUNION 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值。
以上是 Dapper.NET 简单的多表映射 的全部内容, 来源链接: utcz.com/z/352382.html