6

次の方法でプロファイルの詳細を取得しています。

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 テキストのバリエーションを試してみましたが、それでも同じエラーが発生します。

4

1 に答える 1

9

Dapperは、このような1対多のマッピングをそのままではサポートしていません。この質問をチェックしてください、しかしそれは役立つかもしれません。

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

PROFILEIMAGESテーブルのPROFILESIDに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();
} 
于 2012-04-20T08:25:07.130 に答える