アプリケーションで同時に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.
----または私によって次のように内部例外がある
:私は次のエラーを取得します?
あなたはそうです。私は彼らがスレッドセーフではなかったことを知らなかった。ありがとう! –