マルチマッピングクエリの一部として単一のパラメータを返す

c# dapper

質問

Dapperのマルチマップクエリの一部として単一の列を返す必要があるシナリオがあります。

私は下の例を単純化しましたが、本質的には取得したい単一の列の値(int)はPostクラスのプロパティではなく(データベーステーブルにあります)

私は、この値をフェッチするのは、例の次の行に似たような使い方です。statusは、問題のint値です。

post.SetSomeStatus(status);

コード例は次のとおりです。

  var sql = 
    @"select *, p.Status from #Posts p 
    left join #Users u on u.Id = p.OwnerId
    Order by p.Id";

    var data = connection.Query<Post, User, int, Post>(sql, (post, user, status) => { 
        post.Owner = user;
        post.SetSomeStatus(status);
        return post;
    });

    var post = data.First();

このコードで次のエラーが表示されます。 インデックスが配列の境界外にありました

受け入れられた回答

エラーの理由: インデックスが配列の境界の外側にあるのは、 Dapperがこの例の戻り値Post、User&intに割り当てられるクエリ応答のセグメントを分割するためです。 Dapperの規約では、フィールドIDを分割するか、 splitOnパラメータを使用して結果セットを分割する独自のルールを提供します。

上記の例を動作させるには:

  var sql = 
    @"select *, p.Status AS ID from #Posts p 
    left join #Users u on u.Id = p.OwnerId
    Order by p.Id";

    var data = connection.Query<Post, User, int, Post>(sql, (post, user, status) => { 
        post.Owner = user;
        post.SetSomeStatus(status);
        return post;
    });

    var post = data.First();

私はまた私を助けた別の質問を見つけました: DapperでのMultimappingの正しい使い方



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow