Dapper ORMを使用して子オブジェクトの値を取得する方法

c#-4.0 dapper orm

質問

次のようにプロファイルの詳細を取得しています。

var profiles = connection.Query<Models.PROFILE>(
    "SELECT * FROM PROFILES WHERE ID=@ID", 
    new { ID = profileID }); // IEnumerable
var profile = profiles.First<Models.PROFILE>();

profileオブジェクトはprofileImagesのような他のコレクションを含みます。問題は、すべての子オブジェクトの項目数がゼロであるということです。また、私はたとえばprofileImagesというデータを取得したいだけです。

子オブジェクトを照会するために設定する必要があるものはありますか?その場合は、どれをどれくらいのレベルで指定することができますか?

私はマルチマッピングも試しました:

var profiles = connection.Query<Models.PHOTOS_PERMISSIONS,
                                Models.PROFILE,
                                Models.PHOTOS_PERMISSIONS>(sql,
                    (p1, p2) => { p1.ID = profileID; return p1; }, 
                    new { ID = profileID }, 
                    splitOn: "OWNER_PROFILESIDFK, ID").AsQueryable();

PHOTOS_PERMISSIONS.OWNER_PROFILESIDFK = PROFILE.ID

そして、次のようなエラーが出ます。

マルチマッピングAPIを使用するときに、ID以外のキーがある場合は、必ずsplitOnパラメーターを設定してください。パラメーター名:splitOn

私は私のsplitOnテキストにあるもののバリエーションを試しましたが、それでも同じエラーが出ます。

受け入れられた回答

Dapperは、このようにOne-To-Manyマッピングをサポートしていません。この質問をチェックしてみてください。

マルチマッピング、1対多数

PROFILEIMAGESテーブルにPROFILES IDのFKがある場合、2つのクエリーを発行してGridReaderを使用できます。

var sql = 
@"
select * from PROFILES where profileId= @id
select * from PROFILEIMAGES where OWNER_PROFILESIDFK = @id";

using (var multi = connection.QueryMultiple(sql, new {id=selectedId}))
{
   var profile = multi.Read<Models.PROFILE>().Single();
   profile.ProfileImages = multi.Read<Model.PROFILEIMAGES>().ToList();
} 


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