ActiveRecordMediator.SaveAndFlush блокировка таблицы SQL Server - PullRequest
1 голос
/ 01 марта 2012

Я пытаюсь исследовать проблему, связанную с .NET ActiveRecord в SQL Server 2008.

У нас есть базовый класс репозитория, в котором у нас есть методы, определенные для объектов «Сохранение и обновление», эти методы обычно обращаются непосредственно к ActiveRecordMediator.

У нас есть конкретный экземпляр, где, если мы вызовем ActiveRecordMediator.SaveAndFlush для одного из наших объектов, а затем попытаемся выполнить сохраненный процесс, который читает из таблицы, которую мы только что сохранили, sproc зависнет.

Глядя на SQL Server, таблица заблокирована, поэтому ее нельзя прочитать. Итак, мои вопросы:

  1. Почему мой SaveAndFlush блокирует стол?
  2. Как я могу убедиться, что блокировка не происходит?

Это приложение работает как веб-сайт ASP.NET, поэтому я предполагаю, что оно поддерживает сеансы по запросу, но я не уверен.

1 Ответ

1 голос
/ 02 марта 2012

Мне кажется, я понял, почему это происходит.

NHibernate при использовании в нашей среде будет держать транзакцию открытой для всего запроса, а затем, когда сеанс будет ликвидирован, завершит транзакцию.

Наш sproc не использовал ту же транзакцию, что и NHibernate, поэтому произошла блокировка.

Я частично исправил проблему, обернув свое сохранение серверной части сущности в использование

using(var ts = new TransactionScope(TransactionMode.New))
{
    ActiveRecordMediator.SaveAndFlush(value);
    ts.VoteCommit();
}

Таким образом, сущность будет немедленно сохранена и зафиксирована.

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