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<>を使用して、 Func<>クラスとResidenceプロパティをCountryのインスタンスに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 )の第1列です。 Dapperは自動的に分割するIdという列を探しますが、見つからずsplitOnが指定されていない場合は、有用なメッセージが表示されてSystem.ArgumentExceptionがスローされます。したがって、オプションですが、通常はsplitOn値を指定するsplitOnます。