C#用Attribute实现AOP事务2011-07-07 博客园 农民伯伯C# 用Attribute实现AOP事务 [C# | AOP | Attribute | ContextAttribute | IContributeObjectSink | IMessageSink ]阅前注意1.整篇文章的核心和突破点在于上下文Context的使用,务必注意CallContext在整个程序中起到的作用2.本文中看到的SqlHelper使用的是微软SqlHelper.cs。3.本文重点在于如何实现,并且已经测试通过,只贴关键性代码,所以请认真阅读,部分代码直接拷贝下来运行是会出错的!正文首先我们来看一段未加事务的代码:SqlDAL.cs
public abstract class SqlDAL{#region ConnectionStringprivate 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 ExecuteNonQuerypublic 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