zoukankan      html  css  js  c++  java
  • Automatic Transaction Management Facility 使用

    需要引用的程序集:

    • Castle.Facilities.AutomaticTransactionManagement
    • Castle.Services.Transactions
    • Castle.DynamicProxy
    • Castle.Core



    1、配置

    WindsorContainer container = new WindsorContainer(store);
    container.AddFacility( 
    "auto.transaction"new TransactionFacility() );

     或

    <facilities>
        
    <facility id="transaction" type="Castle.Facilities.AutomaticTransactionManagement.TransactionFacility, Castle.Facilities.AutomaticTransactionManagement" />

    </facilities>

    2、在代码中使用自动的事务管理
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Text;

    using FES.Persistence;
    using FES.Domain.Common;
    using FES.Service.Interface;

    using Castle.Facilities.IBatisNetIntegration;
    using Castle.Services.Transaction;
    using Castle.Facilities.AutomaticTransactionManagement;

    namespace FES.Service.Implement
    {
        [Transactional]
        [UsesAutomaticSessionCreation]
        
    public class CommonService : ICommonService
        
    {
            
    private CommonSqlMapDao _common;
            
    public CommonService(CommonSqlMapDao common)
            
    {
                _common 
    = common;
            }


            [Transaction(TransactionMode.Requires)]
            
    public bool LogIn(string empcode, string password, ref Employees emp)
            
    {
                emp 
    = _common.GetEmployeeDetailByPassword(empcode, password);
                
    if (emp == null)
                
    {
                    
    return false;
                }

                
    else
                
    {
                    
    return true;
                }

            }



            [Transaction(TransactionMode.Requires)]
            
    public void InsertEmpPages(EmpPages pages)
            
    {
                _common.DeleteEmpPages(pages.Eid);
                _common.AddEmpPages(pages);
            }


            [Transaction(TransactionMode.Requires)]
            
    public void InsertEmpPages(ArrayList al,int eid)
            
    {
                _common.DeleteEmpPages(eid);
                
    for (int i = 0; i < al.Count; i++)
                
    {
                    EmpPages pages 
    = (EmpPages)al[i];
                    _common.AddEmpPages(pages);
                }

            }

        }

    }

    注意:如果你在容器注册使用自动事务管理的组件不是以一个接口来注册的,那么在需要自动事务管理的方法必须声明为:virtual。

    还可以在容器注册组件的配置文件中来使用自动的事务管理:

    <configuration>

      
    <components>
        
    <component
                
    id="common"
                service
    ="FES.Service.Interface.ICommonService, FES.Service"
                type
    ="FES.Service.Implement.CommonService, FES.Service" isTransactional="true">
          
    <transaction>
            
    <method name="LogIn" />
            
    <method name="InsertEmpPages" />
          
    </transaction>
        
    </component>
      
    </components>
      
    </configuration>


     

  • 相关阅读:
    史上最全的网银转账测试分析与设计
    【面试题】你是测试工程师,如何保证软件的质量?
    小白成长建议--小白如何提问
    [感悟]性能测试测什么
    通过一个简单的数据库操作类了解PHP链式操作的实现
    PHP魔术方法小结.md
    谈PHP中信息加密技术
    PHP输入流php://input [转]
    【PHPsocket编程专题(实战篇③)】构建基于socket的HTTP请求类
    从一次面试经历谈PHP的普通传值与引用传值以及unset
  • 原文地址:https://www.cnblogs.com/pw/p/628866.html
Copyright © 2011-2022 走看看