2011-02-09 13 views
1

アプリケーションで同時に2つのことが起こっています。タイマーは、バックグラウンドスレッドで数秒ごとにデータグリッドを更新する要求を起動します。ここでは、そのスレッドで実行されるコードは次のとおりです。Entity Framework - 複数のクエリが同時に実行されたときのエラー

// Query 
    var qryPickupRequests = from pr in objDataContext.pickupRequests 
           .Include("toLocation") 
           .Include("fromLocation") 
           .Include("person") 
          orderby pr.creationDate ascending 
          select pr; 

    // Refresh from server? 
    if (boolRefreshFromServer) 
     (qryPickupRequests as ObjectQuery).MergeOption = MergeOption.PreserveChanges; 

    // Limit? 
    if (intLimit > 0) 
     return qryPickupRequests.Take(intLimit).ToList<pickupRequest>(); 
    else 
     return qryPickupRequests.ToList<pickupRequest>(); 

さて、UIスレッドで、別の形でそれは場所のグリッドを更新して開いている:

/// <summary> 
/// Refreshes the specified location data grid 
/// </summary> 
/// <param name="sender">Instance of GridLookupEdit to update</param> 
private static void RefreshLocations(object sender) { 

    GridLookUpEdit objEditor = sender as GridLookUpEdit; 

    objEditor.Properties.DataSource = BRData.Models.LocationModel.GetLocationList(true); 
    objEditor.Properties.DisplayMember = "locationName"; 
    objEditor.Properties.ValueMember = "locationID"; 

} 

私は問題は、これらのコードブロックの両方がまったく同時に実行されるときである。データベースの同時操作がエンティティフレームワークによって正しく処理されない理由を任意のアイデア

There is already an open DataReader associated with this Connection which must be closed first.

----または私によって次のように内部例外がある

enter image description here

:私は次のエラーを取得します?

答えて

4

エンティティフレームワークのオブジェクトコンテキストはスレッドセーフではありません。あなたが使用する各スレッドとは異なるコンテキストを使用していることを確認してください。あなたのコード例からは明らかではありませんが、問題がどこにあるのかは私が最初に推測したものです。

+0

あなたはそうです。私は彼らがスレッドセーフではなかったことを知らなかった。ありがとう! –

関連する問題