1

我正在开发一个现有系统(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(因为它有大量用户)。
工作单元模式对我来说是新事物。
提前致谢 ...

4

1 回答 1

0

好吧,在您的工作单元模式中,您需要调用 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();
}

用 try catch 包围整个事物,您将完成所有设置。如果您遇到任何异常,则永远不会调用 ts.Complete() 并且您的数据库更改将回滚。请记住在启动事务范围之前以及在提交或回滚之后重置连接。

于 2011-02-23T21:57:09.937 回答