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 속성을 Country 인스턴스로 채울 수 있습니다. 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" 채우기 될 다음 클래스 유형의 첫 번째 열인 splitOn: "Residence" 인수를 사용합니다 (이 경우 Country ). Dapper는 자동으로 분리 할 ID 라는 열을 찾습니다. 그러나 찾지 못하면 splitOn 이 제공되지 않으면 System.ArgumentException 이 유용한 메시지와 함께 표시됩니다. 따라서 옵션이지만 일반적으로 splitOn 값을 제공 splitOn 합니다.