using System;
using System.Data;
using System.Reflection;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
问题一:“NHibernate”是一个什么样的命名空间???有什么作用,是微软的,还是第三方的???

namespace Finance.Common
{
    //SessionFactory (NHibernate.ISessionFactory)对属于单一数据库的编译过的映射文件的一个线程安全的,不可变的缓存快照。
    //它是Session的工厂,是ConnectionProvider的客户。
问题二:Session工厂是什么意思???就像数据库工厂似地???看不懂注释什么意思???
public class SessionFactory
{
public SessionFactory() { }
       
private static ISessionFactory sessions;
/// NHibernate.Cfg.Configuration的一个实例代表了应用程序中所有的.NET类到SQL数据库的映射的集合。
        /// Configuration用于构造一个(不可变的)ISessionFactory。
        /// 这些映射是从一些XML映射文件中编译得来的。 
        private static Configuration cfg;
static readonly object padlock = new object();
问题三:“Session”不是表示会话吗???怎么和Configuration扯到一起了???问题四:“NHibernate.Cfg.Configuration的一个实例代表了应用程序中所有的.NET类到SQL数据库的映射的集合。”这一句什么意思???什么叫“应用程序中所有的.NET类到SQL数据库的映射的集合”???
        
        /// <summary>
        /// 创建一个数据库链接,并且打开一个ISession
        /// </summary>
        /// <param name="AssemblyName">程序集名称</param>
        /// <returns></returns>
public static ISession OpenSession(string AssemblyName)
{
if (sessions == null)
{
lock (padlock)
{
if (sessions == null)
{
BuildSessionFactory(AssemblyName);
}
}
}
            
return sessions.OpenSession();问题五:这个方法实现的是什么功能???什么样的处理过程???
}        /// <summary>
        /*--------------------------------------------------
                当所有的映射都被Configuration解析之后,
           应用程序为了得到ISession实例,必须先得到它的工厂。
           这个工厂应该是被应用程序的所有线程共享的:
         ---------------------------------------------------*/ 
        /// </summary>
        /// <param name="AssemblyName"></param>
private static void BuildSessionFactory(string AssemblyName)
{
cfg = new Configuration();
            //AddAssembly让NHibernate读取一个程序集中所有的配置文件
cfg.AddAssembly(AssemblyName);
            //创建Session的工厂返回ISessionFactory
sessions = cfg.BuildSessionFactory();
问题六:“cfg = new Configuration();”方法在“NHibernate”中吧,它可以创建sessions对象???
在Bin文件夹下有一个“NHibernate.DLL”文件,但是不知它是干嘛的???
}
        //创建数据库
        public static void CreateDataBase(string AssemblyName)
        {
            cfg = new Configuration();
            cfg.AddAssembly(AssemblyName);
            SchemaExport sch = new SchemaExport(cfg);
            sch.Create(true, true);
        }
问题七:这个方法又是干嘛的???实现了什么功能???问题八:这个类实现的是什么???建立数据库连接还是控制打开会话???
}
}
谢谢大家,这里用到的东西小弟没有见到过啊

解决方案 »

  1.   

    NHibernate不是MS的是一个ORM框架。。
    这里的sessions跟.net里的Session不一样的。。BuildSessionFactory构造一个对象Nhibernate 通过linfu castle 等proxy 来构建session 通过session来增删改查可以去看看 李永京 或者刘冬的文章
      

  2.   

    建议楼主百度一下Nhibernate.
    我随便答几个吧
    Nhibernate是个开源项目,第三方的。
    这里Session和Asp.net的Session是不同的东西。
    你找点Nhibernate的文档看看,上面问题就全明白了
      

  3.   

    NHibernate是一个第三方的开源orm框架。其他的看这里就能明白了。
    http://kb.cnblogs.com/zt/nhibernate/
      

  4.   

    Nhibernate是移植自Hibernate的一个框架。所谓 ORM,就是对象关系映射,通俗地说,就是把数据库的数据读取到对象里面,或者把对象保存到数据库(持久化)。在Hibernate里面,对象有3个状态:Hibernate三种状态之一:临时状态(Transient):用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象;Hibernate三种状态之二:持久化状态(Persistent):已经持久化,加入到了Session缓存中。如通过hibernate语句保存的对象。处于此状态的对象叫持久对象;Hibernate三种状态之三:游离状态(Detached):持久化对象脱离了Session的对象。如Session缓存被清空的对象。特点:已经持久化,但不在Session缓存中。处于此状态的对象叫游离对象;可以看出,Session其实就是沟通对象和数据库的纽带。
      

  5.   

    NHibernate 是一个面向.NET 环境的对象/关系数据库映射工具。对象关系映射(O/R Mapping,Object Relational Mapping)表示一种技术,用来把对象模型表示的对象映射到基于SQL 的关系模型数据结构中去。...