2

EFを使用して必要なデータをデータベースに照会するWCFサービスをいくつか作成しています。私が現時点で持っている問題は、2つ以上のEF LINQクエリが宣言され、データを取り戻すために実行されていることです。 1つのEFクエリが発行され、その後に1つのEFクエリが発行されます。Parallel EF LINQクエリを実行できますか?

クエリを並列で発行する簡単な方法を知っている人はいますか?あるいは、私は正しい動作を得るために非同期/並列タスクを見ています。

DBContextはスレッドセーフではないことがわかっているので、必要に応じて複数のコンテキストを宣言する際に問題はありません。

コードは、これまでのところ以下の通りです:

using (IMyContext ctx = MyFactory.GetInstance(request.UserId)) { 

    Response response = new Response(); 

    response.customer = ctx.GetCustomerByAccount(request.data.Account); 
    response.orders = ctx.GetOrdersByAccount(request.data.Account); 
    response.address = ctx.GetDefaultAddressByAccount(request.data.Account); 

    return response; 
} 

GetCustomerByAccount、GetOrdersByAccount、およびGetDefaultAddressByAccountコードは単純に見えます私のデータを取得するためにDbSetに見つけるん。

重要な場合は、OracleでEFを使用し、コードファーストを使用しています。私はナビゲーションのプロパティとテーブル間の制約がないので、メインの顧客レコードを照会するときに、怠惰な読み込みでOrdersとAddressを読み込むようEFに指示することはできません。事前に

おかげで、 ニック

答えて

0

あなたはPLINQの使用を調査することができます。少しあなたのケースでは、次のようになります http://msdn.microsoft.com/en-us/library/dd460699.aspx

The is also the easy use if Task library.

using (IMyContext ctx = MyFactory.GetInstance(request.UserId)) { 

Response response = new Response(); 

//response.customer = ctx.GetCustomerByAccount(request.data.Account); 
// you will need to get the return type right, but the example is enough no doubt... 
var taskCust = new Task<Customer>(() => ctx.GetCustomerByAccount(request.data.Account)); 
taskCust.Start(); 

// similar for 
// response.orders = ctx.GetOrdersByAccount(request.data.Account); 
// response.address = ctx.GetDefaultAddressByAccount(request.data.Account); 

Task.WaitAll(taskCust, taskOrders, TaskAddress); 

// fish responses off the tasks and stick in the response structure... See Result property 
response.customer = taskCust.result; 
return response; 
} 
関連する問題