1つの行から複数​​のオブジェクトをDapper

c# dapper

質問

私は1つの行がデータベースから来ている

select "John" Name, 
       "Male" Gender,
       20 Age,
       "Rex" PetName,
       "Male" PetGender,
       5 PetAge
       // ... many more ...

Dapperを使用して、この行を2つのオブジェクトにしたいと思います。

class Person
{
    public string Name { get; set; }
    public string Gender { get; set; }
    public int Age { get; set; }
    // ... many more ...
}    
class Pet
{
    public string PetName { get; set; }
    public string PetGender { get; set; }
    public int PetAge { get; set; }
    // ... many more ...
}

注:ここでは階層関係はありません。私は単純に1つのデータベース行を2つ(またはそれ以上)のオブジェクトにマップしようとしています。

どのように私はこれをDapperを使って行うことができますか?

  • 私は動的に戻って各オブジェクトを手動でマッピングすることでこれを行うことができることを知っています。私のシナリオではたくさんの列があるように痛いです。私はむしろこれをしないだろう。 (また、列数を減らすように再設計することはできません)。

私が試したこと:

  • QueryMultiple<Person,Pet>を調べましたがQueryMultiple<Person,Pet>複数のクエリを実行していると仮定しています。現実のシナリオでは、これは非常に高価なクエリです。私は一度だけ実行したいと思います。
  • 私はQuery<Person,Pet,Tuple<Person,Pet>>を返すことも見てきましたが、これにはId列が必要です。ここにはハイパーアーカイブ関係やIdありません。私はちょうど単一の行を取って、それを複数の列にマップしたい。

受け入れられた回答

あなたは、 Queryメソッドを使って解決に近づいていました。 Id列がない場合は、 splitOn引数を指定できます。

connection.Query<Person, Pet, Tuple<Person, Pet>>(sql, 
    (person, pet) => Tuple.Create(person, pet), splitOn: "PetName");


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ