c# – Dispose()如何知道它是因为异常而调用的?

c# – Dispose()如何知道它是因为异常而调用的?,第1张

概述我想编写一个简单的工作类单元,其行为如下: using (var unitOfWork = new UnitOfWork()){ // Call the data access module and don't worry about transactions. // Let the Unit of Work open a session, begin a transaction a 我想编写一个简单的工作类单元,其行为如下:
using (var unitOfWork = new UnitOfWork()){   // Call the data access module and don't worry about transactions.   // Let the Unit of Work open a session,begin a transaction and then commit it.}

这就是我到目前为止(如果您认为我的设计错误,欢迎任何评论):

class UnitOfWork : Idisposable{   ISession _session;   ITransation _transaction;   .   .   .   voID dispose()   {      _transaction.Commit();      _session.dispose();   }}

我想要做的是回滚事务,以防数据访问代码抛出一些异常.所以dispose()方法看起来像:

voID dispose()   {      if (dispose was called because an exception was thrown)       {         _transaction.Commit();      }      else      {         _transaction.RollBack();      }      _session.dispose();   }

是否有意义?如果是这样,怎么办呢?

解决方法 “dispose()”应该与事务提交或回滚无关.您应该在dispose()方法中处理事务.更改dispose()方法的语义只会为您和使用您的类的其他任何人带来混乱.

事务的Commit()和RollBack()方法与dispose()方法没有任何关系,因为这两个方法和dispose()之间没有关联,因为无论最终结果如何,都必须处理事务.

这是关于连接和事务使用的正确模式.注意Roolback(0与异常有关(而不是处置)

connection.open();var trasnaction = null;try{  transaction = connection.BeginTransaction();   ///Do Some work  transaction.Commit();}catch{  transaction.Rollback();}finally{  if (transaction != null)    transaction.dispose();  connection.Close();}

因此,使用Commit(),Roolback()和dispose()方法在UnitOfWork中模仿这种模式.

总结

以上是内存溢出为你收集整理的c# – Dispose()如何知道它是因为异常而调用的?全部内容,希望文章能够帮你解决c# – Dispose()如何知道它是因为异常而调用的?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1246450.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存