基于Nhibernate的三层架构

基于Nhibernate的三层架构分为如下4个模块:

Model层:
                  创建需要被持久化的类  User
                  创建持久化映射文件 User.hbm.xml
                  进行配置文件的设置
数据访问层
                  编写数据访问层的公用类 ,包括: Session 的创建 SessionFactory 和实体的操作 EntityControl
                  编写数据访问层 UserDAL
业务逻辑层UserBLL
用户界面Web

基于Nhibernate的三层架构的优点:

1. 不用手工编写insertupdatedeleteSQL脚本。

2. 可维护性、复用性较高
基于Nhibernate的三层架构的缺点:

1. 作为一个框架可扩展性不够强(不想用nhibernate

2. Nhibernate 的查询难以满足现实查询要求(多表、部分属性查询)
3. 无法使用多数据源( SQL Server Oracle XML

实体的操作(EntityControl)代码片段:

//SessionFactory.cs

using NHibernate;
using Model;
namespace DAL
{
    class EntityControl
    {
        private static EntityControl entity;
        private string _AssemblyName;
        static readonly object padlock = new object();
        public static EntityControl CreateEntityControl(string AssemblyName)
        {
            if (entity == null)
            {
                lock (padlock)
                {
                    if (entity == null)
                    {
                        entity = new EntityControl();
                        entity._AssemblyName = AssemblyName;
                    }
                }
            }
            return entity;
        }
        public void AddEntity(object entity)
        {
            ISession session = SessionFactory.OpenSession(_AssemblyName);
            ITransaction transaction = session.BeginTransaction();
            try
            {
                session.Save(entity);
                transaction.Commit();
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                throw ex;
            }
            finally
            {
                session.Close();
            }
        }
        public void UpdateEntity(object entity, object key)
        {
            ISession session = SessionFactory.OpenSession(_AssemblyName);
            ITransaction transaction = session.BeginTransaction();
            try
            {
                session.Update(entity, key);
                transaction.Commit();
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                throw ex;
            }
            finally
            {
                session.Close();
            }
        }

        public void DeleteEntity(object entity)
        {
            ISession session = SessionFactory.OpenSession(_AssemblyName);
            ITransaction transaction = session.BeginTransaction();
            try
            {
                session.Delete(entity);
                transaction.Commit();
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                throw ex;
            }
            finally
            {
                session.Close();
            }
        }
    }
}

Session的创建(SessionFactory)代码片段:

//SessionFactory.cs

using NHibernate;

using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
namespace DAL
{
    public class SessionFactory
    {
        public SessionFactory()
        { 
        }
        private static ISessionFactory sessions;
        private static Configuration cfg;
        static readonly object padlock = new object();
        public static ISession OpenSession(string AssemblyName)
        {
            if (sessions == null)
            {
                lock (padlock)
                {
                    if (sessions == null)
                    {
                        BuildSessionFactory(AssemblyName);
                    }
                }
            }
            return sessions.OpenSession();
        }

        private static void BuildSessionFactory(string AssemblyName)
        {
            cfg = new Configuration();
            cfg.AddAssembly(AssemblyName);
            sessions = cfg.BuildSessionFactory();
        }
    }
}

数据访问层(UserDAL)代码示例:

//UserDAL.cs

using Model;

namespace DAL
{
    public class UserDAL
    {
        private EntityControl control;
        public UserDAL()
        {
            control = EntityControl.CreateEntityControl("Model");
        }
        public void AddUser(User user)
        {
            control.AddEntity(user);
        }
        public void UpdateUser(User user, string Id)
        {
            control.UpdateEntity(user, user.ID);
        }
        public void DeleteUser(User user)
        {
            control.DeleteEntity(user);
        }
    }
}

配置文件的设置:

//Web.config

<nhibernate>
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> 
    <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/> 
    <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/> 
    <add key="hibernate.connection.connection_string" value="server=.;uid=sa;pwd=saadmin;database=Login"/>
</nhibernate>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值