• 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>


     

  • 相关阅读:
    前端开发之初探五
    前端开发之初探四
    前端开发之初探三
    漫谈
    前端工程师的发展之路
    SVG
    前端开发之初探一
    前端开发之初探二
    详解浏览器缓存
    webStroage案例
  • 原文地址:https://www.cnblogs.com/pw/p/628866.html
Copyright © 2020-2023  润新知