8

一緒に実行する必要があるいくつかのクエリがあり、QueryMultiple機能を使用して実行できます。

しかし、この場合、 MultiMappingを使用する方法を見つけることができませんでした。

これを達成する方法を知っている人はいますか?

4

2 に答える 2

12

実行しようとしているクエリの例がないとわかりにくいですが、これはあなたが探しているものだと思います。

var sql = @"Select * 
            From Parent 
            Left Join Child on Child.ParentID = Parent.ParentID 
            Where Parent.ParentID = @id
            ... more queries";

using(var reader = connection.QueryMultiple(sql, new {id=selectedId}))
{
    var stuff = reader.Read<Parent, Child, Parent>(
        (p,c)=> 
        {
            p.Child = c;
            return p;
        }, splitOn: "ChildId").Single();
    // Continue to read from the other queries in your sql.
}

基本的に のReadメソッドは拡張メソッドSqlMapper.GridReaderに似ています。3 つ以上のジェネリック型を取るオーバーロードの 1 つを含むパラメーターQueryのみを取得します。splitOn

于 2013-07-05T12:23:00.453 に答える
1

別のスレッドから取られた簡単な例があります: how-to-get-values-for-child-objects

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-26T06:25:00.660 に答える