C# 用Attribute实现AOP事务
来源:互联网 发布:township mac 绿钞 编辑:程序博客网 时间:2024/05/22 14:51
前言
使用Attribute来实现方法级别事务一直是我的梦想,浅谈Attribute [C# | Attribute | DefaultValueAttribute]有体现我的无奈,Attribute确实是真真切切的非侵入式的东西(其实我是想侵入的: ) ),前有DUDU的Attribute在.net编程中的应用系列文章,但是总是离想象和需求有那么点出入,通过三天的努力,Google的陪伴,下面和大家一起分享我这三天的成果用Attribute实现AOP事务 吧!
致谢文章
1. Aspect-Oriented Programming Enables Better Code Encapsulation and Reuse 关键性的CallContext是在这里发现的。
2. C# Attribute在.net编程中的应用 (转)这篇文章原文地址找不到了,DUDU的Attribute在.net编程中的应用系列文章就是这篇文章的分解,他写到了五,后面的大家可以从这篇文章里面提前看到了。
阅前注意
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
代码说明:
1. 本类对SqlHelper.cs 进一步封装。
2. Configurations.SQLSERVER_CONNECTION_STRING 替换成自己的连接字符串就行了。
UserInfoAction.cs
public class UserInfoAction : SqlDAL
{
/// <summary>
/// 添加用户
/// </summary>
public void Add(UserInfo user)
{
StringBuilder sb = new StringBuilder();
sb.Append("UPDATE [UserInfo] SET Password='");
sb.Append(user.Password);
sb.Append("' WHERE UID=");
sb.Append(user.UID);
ExecuteNonQuery(sql);
}
}
- C# 用Attribute实现AOP事务
- C# 用Attribute实现AOP事务
- C# 用Attribute实现AOP事务 [C# | AOP | Attribute | ContextAttribute | IContributeObjectSink | IMessageSink
- \t\tC# 用Attribute实现AOP事务
- C# 用delegate实现AOP事务[C# | AOP | delegate]
- C#当中利用Attribute实现简易AOP
- .net利用Attribute简单实现AOP
- [AOP系列]Autofac+Castle实现AOP事务
- AOP学习-基于Emit和Attribute的简单AOP实现
- Spring aop实现事务加锁
- 巧用“Delegate”实现AOP事务
- Autofac+Castle实现AOP事务
- C# AOP实现
- C# AOP手动实现
- C#实现AOP框架
- C#实现的事务
- C# SqlClient 事务实现
- 用attribute实现ORM
- 常用基本逻辑电路相关介绍
- IDEA 14配置jdk,tomcat及热部署
- android sdcard存储方案(基于wrapfs文件系统)
- easyui超链接中使用session值
- AJAX访问PHP
- C# 用Attribute实现AOP事务
- [Leetcode]Search in Rotated Sorted Array
- 观《绣春刀》后作
- JS开发HTML5游戏《神奇的六边形》(四)
- myeclipse 编辑java中的变量时,高亮显示
- WIN7 64位系统 VS2012 安装openssl
- Codeforces Round #321 (Div. 2) C. Kefa and Park time limit per test
- Android 提示框的几种类型
- 折线图(三)绘制x轴单位值,以及标识物