Welcome

首页 / 软件开发 / C# / C#用Attribute实现AOP事务

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