Scoped DataContext периодически вызывает ошибку ExecuteReader - PullRequest
0 голосов
/ 17 июля 2009

Наше приложение следует подходу к поддержанию DataContext для каждого потока / HttpContext, используя класс DataContextFactory, описанный Риком Стрэлом в его блоге , включая поправку к ключу, упомянутую Ричардом (использование type.AssemblyQualifiedName ).

Решение выглядело здравым (хотя в большинстве случаев другой подход может быть лучше), однако при использовании этого я видел периодические ошибки, появляющиеся в приложении:

ExecuteReader требует открытого и Доступное соединение. Связь текущее состояние закрыто.

Я получаю доступ к текстовому тексту через код, используя свойство ниже, которое является частью класса моего DataContext:

/// <summary>
/// Returns the current datacontext for the thread or HttpContext, creating one if it does not exist.
/// </summary>
public static SharedDataContext Current
{
    get
    {
        return DataContextFactory.GetScopedDataContext<SharedDataContext>();
    }
}

Находясь в прерывистом положении, мне трудно придавить это. Кто-нибудь знает, что я могу делать неправильно, или есть хорошая идея, как я могу отладить эту проблему?


Обратите внимание, что это может быть дубликатом неотвеченного вопроса здесь

1 Ответ

0 голосов
/ 28 августа 2009

Теперь мы используем пользовательский DataContextFactory, который поддерживает данные для каждой транзакции. Единственным другим основным изменением было использование [ThreadStatic] для свойств, а не ручной доступ через Thread.Get / SetData

Поскольку это изменение, похоже, проблема больше не появляется, и, поскольку другие ответы не были выдвинуты, я предлагаю [ThreadStatic] в качестве решения

...