Entity Framework - Ошибка при одновременном выполнении нескольких запросов. - PullRequest
1 голос
/ 09 февраля 2011

В моем приложении одновременно происходит две вещи. Таймер запускает запрос на обновление сетки данных каждые несколько секунд в фоновом потоке. Вот код, который запускается этим потоком:

    // 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>();

Теперь в потоке пользовательского интерфейса открыта еще одна форма, обновляющая сетку местоположений:

/// <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";

}

Проблема в том, что оба эти кодовых блока выполняются в одно и то же время. Я получаю следующую ошибку:

enter image description here

Внутреннее исключение выглядит следующим образом:

Уже есть открытый DataReader связано с этим соединением, которое должен быть закрыт первым.

Есть идеи, почему параллельные операции с базами данных не обрабатываются корректно Entity Framework ---- или мной?

1 Ответ

4 голосов
/ 09 февраля 2011

Контексты объекта Entity Framework не являются поточно-ориентированными.Убедитесь, что вы используете разные контексты для каждого потока, который вы используете - это не ясно из вашего примера кода, который вы делаете, но это будет мое первое предположение о том, где проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...