风影总结NHibernate4 NHibernateBase帮助类详解

上文回顾:

我们把配置文件,Model和Mapping做了简单的介绍。使我们可以轻松的通过配置文件的方式来进行NH的配置。

 

本文介绍:

我们通过对NHibernateBase的了解一下NH的运行机制。

 

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text;
   5:  using System.Threading.Tasks;
   6:  using NHibernate;
   7:  using NHibernate.Cfg;
   8:   
   9:  namespace NHModel
  10:  {
  11:      public class NHibernateBase
  12:      {
  13:          private static Configuration Configuration { get; set; }
  14:          protected static ISessionFactory SessionFactory { get; set; }
  15:          private static ISession session = null;
  16:          private static IStatelessSession statelessSession = null;
  17:          public static Configuration ConfigureNHibernate(string assembly)
  18:          {
  19:              Configuration = new Configuration();
  20:              Configuration.AddAssembly(assembly);
  21:              return Configuration;
  22:          }
  23:          public void Initialize(string assembly)
  24:          {
  25:              Configuration = ConfigureNHibernate(assembly);
  26:              SessionFactory = Configuration.BuildSessionFactory();
  27:          }
  28:          public static ISession Session
  29:          {
  30:              get
  31:              {
  32:                  if (session == null)
  33:                  {
  34:                      session = SessionFactory.OpenSession();
  35:                  }
  36:                  return session;
  37:              }
  38:          }
  39:          public static IStatelessSession StatelessSession
  40:          {
  41:              get
  42:              {
  43:                  if (statelessSession == null)
  44:                  {
  45:                      statelessSession = SessionFactory.OpenStatelessSession();
  46:                  }
  47:                  return statelessSession;
  48:              }
  49:          }
  50:      }
  51:  }

 

里面有几个概念,我们要说一下

首先NHibernateBase类里,我们发现有4个私有的静态属性。这个属性就是我们要讲解的重点

Configuration

位于 NHibernate.Cfg.Configuration命名空间下,它的作用是把所有的配置文件和模型进行初始化,但是他需要知道配置文件所在的程序集。

   1:  Configuration = new Configuration();
   2:  Configuration.AddAssembly(assembly);

这个assembly必须是mapping所在的程序集名。

加载程序集完成后,我们需要对所有的配置文件和Model进行编译,也就是注册到内存中,达到持久化的效果。

 

ISessionFactory

位于NHibernate.ISessionFactory命名空间下,简单的理解就是一个Session工厂几乎可以处理一个数据库的所有操作

   1:  SessionFactory = Configuration.BuildSessionFactory();

通过这句代码,我们可以得到一个Session工厂。

ISession

位于NHibernate.ISession命名空间下,称之为会话,看似和asp.net里的Session长的很像,其实,这里一个Session代表一次数据库操作。

   1:  session = SessionFactory.OpenSession();

我们可以通过Session工厂的OpenSession方法来得到一个Session(注:可以查看有关联的实体数据,只要session没有释放)。

 

IStatelessSession

位于NHibernate.IStatelessSession命名空间下无状态会话,这个和ISession的差异就在,它本身会在执行完数据操作后马上关闭。不会有延迟加载数据的效果。

   1:  statelessSession = SessionFactory.OpenStatelessSession();

 

有了这2个Session我们就可以做CRUD操作了。

posted on 2012-08-06 16:37  任生风影  阅读(520)  评论(0编辑  收藏  举报

导航