最近一切直困扰于NHibernate的三层架构的搭建(windows 窗体应用程序,非web应用程序).
[界面层UI-->业务逻辑层BLL-->数据访问层DAL-->数据库]
对于NHibernate中session的构建始终无法搞好,主要是session的处理!!
a.session的一级缓存,NH的二级缓存如何使用b.如果UI中调用BLL中的某方法A,方法A操作完成后,关闭session,
  UI此时还如何去用一级session的一级缓存和lazy load延迟加载c.三层架构如何去考虑缓存 和 延迟加载,求答案,求示例

解决方案 »

  1.   

    关闭session,就没有lazy load了,UI要的数据在BLL都要弄好。或者保持一个打开的session
      

  2.   

    创建需要被持久化的类
    创建持久化映射文件
    进行配置文件的设置
    数据访问层
    编写业务逻辑层
     public void AddUser(User user)
            { 
                UserDAL dal = new UserDAL();        
                dal.AddUser(user);        }
    NHibernate中Session是线程不安全的,而且每次数据库操作 请求创建Session时对性能有些影响。Web中可以通过将Session与用于请求HttpContext绑定实现线程安全,并且用户当前请求时只有一个Session
    public void Set(ISession session)
            {
                if (session != null)
                {
                    HttpContext.Current.Items.Add(SessionConfigManage.SessionSourceItemName, session);
                }
                else
                {
                    HttpContext.Current.Items.Remove(SessionConfigManage.SessionSourceItemName);
                }
            }
      

  3.   

    nhibernate二级缓存
      

  4.   

    没用过NHibernate, 了解过微软的Entity FrameWork。非经常用的或者单客户的,尽量延后取数据。经常使用的,而且是客户端公用的,可以在bll层缓存。不论是web还是winform 中的Session或者Context, 都应该只保存索引指针性质类的数据,否则服务器端负载太重。