逍遥居

学无止境

导航

NHibernate 配置文件的处理和使用多数据库的多层架构思路(补充部分二)

       第二种情况:多线程,比如.Net Remoting。
        我现在就是遇见Net Remoting,才迫使我写这些东西的!每活动的个线程维护一个 session 。自然就提到了这个属性:System.ThreadStaticAttribute,MSDN是这样描述的:用 ThreadStaticAttribute 标记的 static 字段不在线程之间共享。每个执行线程都有单独的字段实例,并且独立地设置及获取该字段的值。如果在不同的线程中访问该字段,则该字段将包含不同的值。不要为标记为 ThreadStaticAttribute 的字段指定初始值,因为这样的初始化只会发生一次,因此在类构造函数执行时只会影响一个线程。在不指定初始值的情况下,如果它是值类型,可依赖初始化为其默认值的字段,如果它是引用类型,则可依赖初始化为空引用的字段。

        那就不多说了,直接把(一)中底层的两个修改后的类 贴上来,它们是可以在多线程环境下运行的!   CommonDatabaseOperation类没有任何变化!
         EntityControl 类仅修改各个方法中的session 的重新连接和断开!  代码如下:

//-----------------------------------------------------------------------------------------
// 模块编号:
// 文件名: EntityControl.cs
// 描述: EntityControl 实体类
// 作者:ChenJie 
// 编写日期:2007-5-11
// Copyright 2007
//-----------------------------------------------------------------------------------------
using System;
using System.Reflection;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Data;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Expression;
using NHibernate.Engine;
using NHibernate.SqlTypes;
using NHibernate.SqlCommand;

namespace Novelty.CustomSystem.NHibernateOperation.NHibernateModule
{
    
/// <summary>
    
/// 实体通用操作类
    
/// </summary>

    public class EntityControl<T>
    
{
        
私有变量

        
内部成员变量

        
构造函数

        
属性

        
方法
    }

}


      SessionFactory 类改动较大,毕竟就是靠它的对象来为每个线程提供 session.

//-----------------------------------------------------------------------------------------
// 模块编号:
// 文件名: SessionFactory.cs
// 描述: SessionFactory 类
// 作者:ChenJie 
// 编写日期:2007-5-11
// Copyright 2007
//-----------------------------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using System.Data;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;

namespace Novelty.CustomSystem.NHibernateOperation.NHibernateModule
{
    
/// <summary>
    
/// Session的创建类,属于单件模式(Singleton Pattern)
    
/// 一个数据库对应一个持久层项目,所以用对应的持久层项目的程序集名称来标识各自的ISessionFactory,Configuration,ISession各个类的对象
    
/// </summary>

    public sealed class SessionFactory
    
{
        
私有变量

        
构造函数

        
嵌套类

        
属性

        
实现公有方法

        
实现私有方法
    }

}

补充就结束了!
其它四部分地址:
NHibernate 配置文件的处理和使用多数据库的多层架构思路(第一部分)
http://www.cnblogs.com/scucj/archive/2007/05/15/747688.html
NHibernate 配置文件的处理和使用多数据库的多层架构思路(第二部分)
http://www.cnblogs.com/scucj/archive/2007/05/15/747695.html
NHibernate 配置文件的处理和使用多数据库的多层架构思路(第三部分)
http://www.cnblogs.com/scucj/archive/2007/05/15/747698.html
NHibernate 配置文件的处理和使用多数据库的多层架构思路(补充部分一)
http://www.cnblogs.com/scucj/archive/2007/05/16/749192.html

参考资料:
(1) NHibernate的Session管理
http://blog.csdn.net/thebesghost/archive/2006/08/23/1107151.aspx
(2)多线程下WinForm开发应该注意哪些问题?
http://www.cnblogs.com/Cajon/archive/2007/03/21/Multi_Thread_Win_Form.html
(3)NHibernate.Helper Project:
http://blogs.intesoft.net/simon/articles/16.aspx

posted on 2007-05-16 21:35  逍遥剑客  阅读(715)  评论(0)    收藏  举报