2012-04-19 7 views
5

私は次のようにプロファイル詳細情報を取得しています:Dapper ORMを使用して子オブジェクトの値を取得する方法は?

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

プロファイルオブジェクトがprofileImagesのような他のコレクションが含まれています。問題は、すべての子オブジェクトのアイテム数がゼロであることです。また、私は、単にprofileImagesのためのデータを取得したいです。

子オブジェクトを照会するために設定する必要があるものがありますか?その場合は、どのレベルを指定できますか?私はまた、multimapping試してみました

:私は私のsplitOnに何のバリエーションを試してみました

When using the multi-mapping APIs ensure you set the splitOn param if you have keys other than Id Parameter name: splitOn

   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

と、次のエラーを取得しますテキストが、同じエラーが発生します。

答えて

8

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

Multi-Mapping, one-to-many

あなたPROFILEIMAGESテーブルがFKプロファイルにIDを持っている場合 - あなたは2つのquerysを発行し、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(); 
} 
+0

ニース。私は実際には、すべての1 .. *マッピングを返すよりもこのように好きです。複雑なオブジェクトが膨らんでしまう可能性があります。確かに彼らは多くの情報を持っていますが、必要ではないものもあります。このようにして、私はデータを必要とする子テーブルを明示的に要求できます。ありがとう。 – ElHaix

関連する問題