ネストされたマルチマッピングの重複するフィールド名の問題

.net c# dapper orm

質問

Dapperを使ってマルチマッピングをしようとすると、ページネーションクエリで問題が発生しました。

このページ分割シナリオではネストされたクエリを使用しているため、ネストしたクエリ内に複数のテーブルがあり、マルチマップデータを取得する必要がありますが、これらのテーブルの中には、私の下の私の例のクエリ(例えば、 iddisplaynameemail ):

q = @"select * from (select p.id, p.title, p.etc...,
u1.id, u1.displayname, u1.email,
u2.id, u2.displayname, u2.email,
t.id, t.name,
row_number() over (order by " + sort.ToPostSortSqlClause() + ") as rownum" +
" from posts p" +
" join users u1 on p.owneruserid = u1.id" +
" join users u2 on p.lastediteduserid = u2.id" +
" join topics t on p.topicid = t.id" +
") seq where seq.rownum between @pLower and @pUpper";

ネストされたクエリ内でそれを見ることができ、上記の例では、フィールドに問題があるように予定されているid (に表示されてpostsテーブル、両方のusersテーブルの結合やtopics表には参加)、そしてまた、 displaynameemail (両方に表示されますusersテーブル結合)。

私が今まで考えていた唯一の回避策は、これらの「問題」フィールドを別の名前でキャストすることですが、影響を受けるモデルでダミーのプロパティを作成するという面倒なプロセスが必要です。実際の値が設定されていない場合、値のダミープロパティもチェックするために、モデルの '実際の'プロパティを使用します。

また、上記のシナリオでは、xはダミーのプロパティを作成する必要があります。xはクエリ内の同じテーブルにある可能性のあるジョインの数です(この例では、同じUsersテーブルの2つのジョイン、したがって、 Dapperのマッピング目的のためのプロパティ)。

これは明らかに理想的ではありません。私はこれらのマルチマッピングページングクエリの多くを作成したので、問題とノンディーさをノックしています。

私はこの問題にいい、きれいな解決策があると思っていますか?

受け入れられた回答

私が考えることができる2つのオプションがあります:

オプション1 :ネストしたクエリの外にある拡張プロパティに再び参加する:

select s.*, t1.*, t2.* from 
(
select s.*, ROW_NUMBER() OVER (order by somecol) AS RowNumber from Something s
) as X 
left join Table t1 on Id = x.SomeId
left join Table t2 on Id = x.SomeOtherId

オプション2 :列エイリアシングを処理するためにSqlBuilderを拡張する:

select s.*, /**unalias(Table,t1)**/, /**unalias(Table,t2)**/ from 
        (
        select s.*, /**alias(Table,t1)**/, /**alias(Table,t2)**/ ROW_NUMBER() OVER (order by somecol) AS RowNumber from Something s
        left join Table t1 on Id = x.SomeId
        left join Table t2 on Id = x.SomeOtherId
        ) as X 

次に、クエリーするエイリアスマクロを定義し、 INFORMATION_SCHEMA.COLUMNSを使用してdbから列のリストをキャッシュし、単に各列に 'column as column_t1`文字列を追加します。

Unaliasは非常に簡単にその逆を行うことができます。



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