1

Dapper.Queryのジェネリックメソッドを作成しようとしています。今、私はトラブルに遭遇しました。これが私の例です

   public IEnumerable<T1> Lazy<T1, T2>(T2 table) where T1 : EntityBase
    {

        using (IDbConnection cn = GetCn())
        {
            cn.Open();

            return cn.Query<T1, T2, T1>("query", (t1, t2) => { t1.???
        }
    }

以下で説明するように、t2をロードするには、t1のプロパティを使用する必要があります。これも可能ですか?

この例は完了していません。もちろん、「クエリ」文字列は置き換えられます。これはデモ用です。

4

1 に答える 1

3

Dapperには遅延読み込みが含まれておらず、遅延読み込みを実現するためのサポートはまったくありません。これは、Dapperが実行しようとしていることではないためです。これはユーティリティであり、フレームワークではありません。ただし、あなたの例は、水平方向に分割されたデータについて話していることを示唆しています。たとえば、次のようになります。

select foo.*, bar.*
from foo inner join bar on bar.ParentId = foo.Id
where foo.Category = @category

[foo]簡単にするために、両方に列[bar]があると仮定しIdます(パーティション化ルールを手動で指定する方法はありますが、自動的に処理されます)。次に、これは次のようになります。

return cn.Query<Foo, Bar, Foo>(query, args, (foo, bar) => {
    foo.Bar = bar;
    return foo;
});

または同様のもの。Foo重要なのは、とをBar 別々に(パーティションに基づいて)具体化し、それらを組み合わせる方法について心配できるようにすることです。

于 2013-02-07T08:00:42.960 に答える