首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# Attribute 實現 AOP 事務(三):UserInfoAction 標記 Transaction 與 TransactionMethod、SqlDAL 加入 SqlTrans 屬性與 ContextBoundObject 繼承

     編輯:關於C語言

業務類別標記


[Transaction]
public class UserInfoAction : SqlDAL
{
    [TransactionMethod]
    public void Add(UserInfo user)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("UPDATE [UserInfo] SET Password='").Append(user.PassWord)
          .Append("' WHERE UID=").Append(user.UID);
        ExecuteNonQuery(sb.ToString());
    }
}

極簡潔、非侵入式:想要事務加兩個標記,不要就移除。

SqlDAL 基類調整


public abstract class SqlDAL : ContextBoundObject
{
    private SqlTransaction _sqlTrans;
    public SqlTransaction SqlTrans
    {
        get
        {
            if (_sqlTrans == null)
            {
                object obj = CallContext.GetData(TransactionAop.ContextName);
                if (obj != null && obj is SqlTransaction) _sqlTrans = (SqlTransaction)obj;
            }
            return _sqlTrans;
        }
        set { _sqlTrans = value; }
    }
    // ExecuteNonQuery 多載依 SqlTrans 切換執行模式...
}

關鍵點

  • ContextBoundObject:MSDN 定義為「所有上下文繫結類別的基類」,為 AOP 攔截提供基礎設施。
  • CallContext:跨邊界傳遞交易物件的關鍵通道。
  • ExecuteNonQuery 內部判斷 SqlTrans != null 決定使用交易或一般連線。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved