2

一般的な作業単位/リポジトリパターンを作成しましたが、ほとんどの場合機能します。

次に例を示します。

public IEnumerable<Deal> GetBySubcategory(int subcategoryId)
{
    using (var uow = new ReadUow())
    {
        var r = new ReadRepo<Deal>(uow.Context);

        var deals = r.FindBy(d => d.DealSubcategories.Any(s => s.SubcategoryId == subcategoryId))
            .Include("DealSubcategories");

        return deals.ToList();
    }
}

データのサイズを最小限に抑えるために、各メインクエリをフィルタリングしようとしています。私が持っている質問は、上記をより再利用可能にする方法ですか?

上記の方法には1つのフィルターがありますが、これは2、3、またはそれ以上になる可能性があります。可能であれば、バリエーションごとにメソッドを作成したくはありませんIEnumerable<T>が、コンテキストを終了するとすぐに、呼び出しToList()などを行わないと使用できなくなります。これは、使用されていない可能性があり、パフォーマンスにのみ影響を与える可能性がある場合でも、その時点ですべてが具体化されることを意味します。

私が説明したように、誰かがこのコンテキストを拡張した経験がありますか?

4

1 に答える 1

3

IEnumerable<T>return 、 returnの代わりに、 return ステートメントでIQueryable<T>を省略します。.ToList()

ただし、DbContext は HttpRequest の長さ全体にわたって存続する必要があります (Web サイトであると仮定します)。


少し前に、これに多少関連するブログ投稿を作成しました(と思います)。

于 2012-08-25T13:11:29.590 に答える