1

EF 5 を使用してビルドされたライブラリの改善に取り組んできました。パフォーマンスを高速化するために Parallel ライブラリを使用したいと考えています。DbContext はスレッド セーフではなく、トランザクションごとに新しい DbContext を作成する必要があることを理解しています。

私が抱えている問題は、IQueryable が繰り返されるたびに生成される新しいコンテキストを取得する方法です。これが私の実装の切り捨てられた方法です:

    public virtual void ProcessAttachments(IQueryable<File> results)
    {            
        var uniqueOrderKeys = results.Select(r => r.ForeignKey).Distinct();
        //process each order
        Parallel.ForEach(uniqueOrderKeys, key =>
        {                                                                                                                                                         
            var key1 = key;
            var resultsForKey = results.Where(result => result.ForeignKey == key1);

            //process File objects for the order
            Parallel.ForEach(resultsForKey, result =>
            {                                                                                              
                string orderNum;
                using (var da = new DataAccess()) //DataAccess creates the DbContext and is implementing IDisposable
                {
                    orderNum = da.GetOrderNumberByOrderKey(key);
                }
            });
        });
    }

IQueryable の結果がループされて取得されるときに使用する新しい DbContext を指定する方法はありますか?

4

1 に答える 1