C#用Attribute实现AOP事务

C# 用Attribute实现AOP事务 [C# | AOP | Attribute | ContextAttribute | IContributeObjectSink | IMessageSink ]

阅前注意

1.整篇文章的核心和突破点在于上下文Context的使用,务必注意CallContext在整个程序中起到的作用

2.本文中看到的SqlHelper使用的是微软SqlHelper.cs。

3.本文重点在于如何实现,并且已经测试通过,只贴关键性代码,所以请认真阅读,部分代码直接拷贝下来运行是会出错的!

正文

首先我们来看一段未加事务的代码:

SqlDAL.cs  

public abstract class SqlDAL
    {
        #region ConnectionString
        private SqlConnectionStringBuilder _ConnectionString = null;
        /// <summary>
        /// 字符串连接
        /// </summary>
        public virtual SqlConnectionStringBuilder ConnectionString
        {
            get
            {
                if (_ConnectionString == null || string.IsNullOrEmpty(_ConnectionString.ConnectionString))
                {
                    _ConnectionString = new SqlConnectionStringBuilder(Configurations.SQLSERVER_CONNECTION_STRING);
                }
                return _ConnectionString;
            }
            set { _ConnectionString = value; }
        }
        #endregion
        #region ExecuteNonQuery
        public int ExecuteNonQuery(string cmdText)
        {
            return SqlHelper.ExecuteNonQuery(ConnectionString.ConnectionString, CommandType.Text, cmdText);
        }
        public int ExecuteNonQuery(string cmdText, CommandType type)
        {
            return SqlHelper.ExecuteNonQuery(ConnectionString.ConnectionString, type, cmdText);
        }
        public int ExecuteNonQuery(string cmdText, CommandType type, params SqlParameter[] cmdParameters)
        {
            return SqlHelper.ExecuteNonQuery(ConnectionString.ConnectionString, type, cmdText, cmdParameters);
        }
        #endregion

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#
, public
, connectionstring
, executenonquery
, commandtype
, sqlhelper
, connectionStrings
ExecuteNonQuery()
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-09-17 12:53:22

C#用Attribute实现AOP事务的相关文章

C# 用Attribute实现AOP事务 [C# | AOP | Attribute | ContextAttribute | IContributeObjectSink | IMessageSink ]

前言      使用Attribute来实现方法级别事务一直是我的梦想,浅谈Attribute [C# | Attribute | DefaultValueAttribute]有体现我的无奈,Attribute确实是真真切切的非侵入式的东西(其实我是想侵入的: ) ),前有DUDU的Attribute在.net编程中的应用系列文章,但是总是离想象和需求有那么点出入,通过三天的努力,Google的陪伴,下面和大家一起分享我这三天的成果 用Attribute实现AOP事务 吧!   致谢文章    

C#用delegate实现AOP事务[C# | AOP | delegate]

前言 上一篇 C# 用Attribute实现AOP事务 [C# | AOP | Attribute | ContextAttribute | IContributeObjectSink | IMessageSink ]是实现或者说达到AOP效果的一种方式,其实最早设计在C#中使用AOP来完成事务的方案是准备用delegate的,但无奈不习惯用 这个玩意,也理解不深,后来被Attribute吸引了,这个方案就搁浅了,不过现在我又回来了 : ) 正文 我们先来看一段代码雏 形: class Test

AOP事务的例子

给大家看一个例子,共同来分析下存在的问题 场景:保存用户成功后,发送一个消息.如果没有保存成功,回滚同时不能发送消息 前提: 1 先不考虑发送消息会失败的情况,就是一旦调用发送消息的方法就一定会发送成功. 2 tx:annotation-driven也已正常配置 关注问题: AOP是否成功?事务能否正常回滚? 结果是: UserService没有被代理,如何解决 上述问题解决后,会发现并没有开启事务,如何解决? 看看上面的伪代码能不能达到目的

SSH AOP事务配置求解

问题描述 transactionManager和jtatransactionmanager可以同时配置在XML中并使其各自生效么a(){for(){b();}}我有个这样的方法,ab都是事务方法,想b出错的时候只把错的回滚,没错的还是继续提交,但是我现在一回滚就全都回滚了,我原来的XML值配置的transactionManager,好像说要用REQUIRES_NEW这个属性得需要jtatransactionmanager.怎么两者都兼容呢? 解决方案 解决方案二:大神们求助哇

求大神帮忙 spring aop 方式事务不回滚怎么搞?

问题描述 求大神帮忙 spring aop 方式事务不回滚怎么搞? spring 版本 4.1.7 代码如下: 表: CREATE TABLE users (id int(11) unsigned NOT NULL AUTO_INCREMENT,nick_name varchar(100) DEFAULT NULL,password varchar(100) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAU

MSBuild + MSILInect实现编译时AOP之预览

      在本文之前的前几篇浅谈.NET编译时注入(C#-->IL).浅谈VS编译自定义编译任务-MSBuild Task(csproject).编译时MSIL注入--实践Mono Cecil(1)已经讨论了MSBuild和Mono.Cicel.在这里我们将会利用它来实现一个简单的编译时AOP注入机制(这里所说的编译时是指c#到MSIL的预编译过程).我更倾向于像EL(微软企业库框架)这类动态AOP.编译时AOP有PostSharp这种被称之为静态AOP框架,其优势在于直接代码语句,性能更好,

分布式事务系列(1.2)Spring的事务体系

1 系列目录 分布式事务系列(开篇)提出疑问和研究过程 分布式事务系列(1.1)Spring事务管理器PlatformTransactionManager源码分析 分布式事务系列(1.2)Spring事务体系 分布式事务系列(2.1)分布式事务模型与接口定义 分布式事务系列(3.1)jotm的分布式案例 分布式事务系列(3.2)jotm分布式事务源码分析 分布式事务系列(4.1)Atomikos的分布式案例 2 三种事务模型 三种事务模型如下: 本地事务模型 编程式事务模型 声明式事务模型 先来

session-spring事务的一个问题

问题描述 spring事务的一个问题 一个类实现了InitializingBean后,在afterPropertiesSet方法里取sessionFactory.getCurrentSession();,但是报异常 No Session found for current thread.说明spring的事务没有开启,但是已经配置了.想请教下各位大大是怎么回事 解决方案 spring 事务问题Spring AOP 事务问题Spring里多线程共享事务的问题--------------------

Spring transaction事务 roll back各种回滚

 Spring的AOP事务管理默认是针对unchecked exception回滚. 也就是默认对RuntimeException()异常极其子类进行事务回滚. Exception作为基类,下面还分checked exception和unchecked exception.如果客户端可以通过其他的方法恢复异常,那么这种异 常就是checked exception:如果客户端对出现的这种异常无能为力,那么这种异常就是Unchecked exception:简单来说,继承于 RuntimeExcep