как реализовать единицу работы, используя только TransactionScope и sqlconnections - PullRequest
1 голос
/ 22 февраля 2011

Я работаю в существующей системе (asp.net 2, ms sql server 2005), в которой шаблон репозитория реализован следующим образом:

IMyRepository
{
  void add(object o);
  int update(object obj);
  int delete(object obj);
  IList<T> getAll();
  IList<T> getByDate(DateTime date);
....
}

Система имеет 3 различных продукта.Поэтому у нас есть разные хранилища для каждого продукта.Поскольку требования со временем меняются, нам необходимо реализовать шаблон «Единица работы» для транзакций на уровне бизнес-процессов.
У нас нет ORM (на самом деле у нас нет разрешения или времени для его реализации сейчас)дайте мне четкое руководство о том, как реализовать единицу работы, используя только TransactionScope и sqlconnections.

Пожалуйста, укажите, как быстро и эффективно закрыть Sqlconnections (так как в нем много пользователей).
Единица работышаблон для меня новинка.
спасибо заранее ...

1 Ответ

0 голосов
/ 24 февраля 2011

Хорошо, в вашем шаблоне единицы работы у вас есть вызов Commit () и / или Rollback ().С TransactionScope вы вызываете Complete () или вообще ничего, что делает откат.

using(TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
  // do your gets inside of supressed TransactionScopes:
  using (new TransactionScope(TransactionScopeOption.Suppress))
  {
    myRep.GetAll();
  }

  // do your updates
  myRep.Update();

  // no errors, so commit
  ts.Complete();

  // Close db connections
  myConn.Close();
}

Окружите все это уловкой попытки, и все будет готово.Если вы получаете какие-либо исключения, ts.Complete () никогда не вызывается, и ваши изменения в БД откатываются.Просто не забудьте сбросить соединения перед запуском транзакции и сразу после подтверждения или отката.

...