.Net——Nhibernate实现CRUD

最近用到SSH(spring+struct+hibernate),从java里面的hibernate,不自觉联系到.net里面的Nhibernate。

下面来简单聊下Nhibernate.

一,引入Dll

主要有三个:

基本的就这三个,其他的,比如Castle.Core.dll,Castle.DynamicProxy2.dll,Iesi.Collections.dll,log4net.dll

就用到了再引入吧。

二,编写Nhibernate配置文件

<?xml version="1.0" encoding="utf-8"?>
<!--
This template was written to work with NHibernate.Test.
Copy the template to your NHibernate.Test project folder and rename it in hibernate.cfg.xml and change it
for your own use before compile tests in VisualStudio.
-->
<!-- This is the System.Data.dll provider for SQL Server -->
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
  <!--表明一些配置是针对session-factory配置的,sessionfactory是hibernate中的一个类,这个类主要负责保存hibernate的配置信息,以及对session的操作-->
  <session-factory>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property><!--配置数据库的驱动程序,hibernate在连接数据库时,需要用到数据库的驱动程序-->
    <property name="connection.connection_string">server=ZB-LIUHCH-PC\SQLEXPRESS;database=TestMemcached;uid=sa;pwd=123456;</property>
      <!--Server=ZB-LIUHCH-PC\SQLEXPRESS;UserID=sa;Database=TestMemcached;Password=123456;-->
    <property name="adonet.batch_size">10</property>
    <property name="show_sql">true</property>
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
    <!--<property name="use_outer_join">true</property>-->
    <property name="command_timeout">10</property>
    <property name="hbm2ddl.auto">update</property>
    <property name="query.substitutions">true 1, false 0, yes ‘Y‘, no ‘N‘</property>
    <mapping assembly="NhibernateTest"/>
  </session-factory>
</hibernate-configuration>

   PS:文件属性为始终复制到输出路径;

三,编写实体类及其配置文件

实体类:

namespace NhibernateTest
{
   public class User
    {
        public virtual string UserCode { get; set; }
        public virtual string UserName { get; set; }
        public virtual string UserAge { get; set; }
    }
}

配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<!--assembly:程序集,namespace:命名空间-->
<hibernate-mapping  xmlns="urn:nhibernate-mapping-2.2" assembly="NhibernateTest"  namespace="NhibernateTest">
  <class name="NhibernateTest.User,NhibernateTest" table="User">
    <!--主键-->
    <id name="UserCode" type="string" unsaved-value="null">
      <column name="UserCode" sql-type="nvarchar" not-null="true" unique="true"/>
      <generator class="assigned"></generator>
    </id>
    <property name="UserName" type="String">
      <column name="UserName" sql-type="nvarchar"  not-null="false"/>
    </property>
    <property name="UserAge" type="String">
      <column name="UserAge" sql-type="nvarchar"  not-null="false"/>
    </property>

  </class>
</hibernate-mapping>

四,测试代码

为了方便操作使用nhibernate,最好编写一个工具类:

 public class NHibernateHelper
        {
            private ISessionFactory _sessionFactory;
            public NHibernateHelper()
            {
                //创建ISessionFactory
                _sessionFactory = GetSessionFactory();
            }
            /// <summary>
            /// 创建ISessionFactory
            /// </summary>
            /// <returns></returns>
            public ISessionFactory GetSessionFactory()
            {
                //配置ISessionFactory
                return (new Configuration()).Configure().BuildSessionFactory();
            }
            /// <summary>
            /// 打开ISession
            /// </summary>
            /// <returns></returns>
            public ISession GetSession()
            {
                return _sessionFactory.OpenSession();
            }
        }

之后我们写四段代码来简单看看CRUD操作:

  static void Main(string[] args)
        {
            Configuration configuration = new Configuration().Configure("hibernate.cfg.xml");  //nhibernate的配置文件的路径
            ISessionFactory sessionFactory = configuration.BuildSessionFactory();
            ISession isession = sessionFactory.OpenSession();

            #region 添加用户
                User user = new User() {
                    UserName="漠漠水田飞白鹭",
                    UserAge="789",
                    UserCode="momoshuitianfeibailu"
                };
                isession.Save(user);
                //isession.Flush();
                //isession.Close();

            #endregion

            #region 读取用户信息
                User MyUser = isession.Get<User>("momoshuitianfeibailu");
            #endregion

            #region 更新用户信息
                MyUser.UserAge="00000000";
                isession.Update("momoshuitianfeibailu", MyUser);
            #endregion

            #region 删除数据
                isession.Delete(MyUser);
                isession.Flush();
                isession.Close();

            #endregion
        }

整个项目结构:

小结:

以前在配置spring的时候就有这种感觉,感觉java平台下面的配置文件和。net平台下的配置文件配置起来大致是雷同的,还是蛮有意思的。

另一方面,与之前使用过的EF相比,EF因为有三种开发模式,code first,DB first, Model First,选择性比较大,如果我不想配置那么多文件,完全可以直接db first,之后各种东西就生成了,我直接用一个上下文参数就可以操作数据库。而Nhibernate的配置文件则要手写,万一我一手抖,写错一个字母,debug就耗费好多时间。

但是Nhibernate感觉比EF轻量一点儿,而且Nhibernate的透明持久化,这个特性挺有意思的,与EF相比,可以说它是基于Session的,不是长连接。

个人感觉就这么多啦。。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-28 23:55:20

.Net——Nhibernate实现CRUD的相关文章

【转载】ADO.NET与ORM的比较(2):NHibernate实现CRUD

[转载]ADO.NET与ORM的比较(2):NHibernate实现CRUD  转自周公 说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操作数据库之外,大量的书籍中都是讲述使用Hibernate这个ORM工具来操作数据.在.NET中操作数据库的方式有多种,除了最直接的方式就是使用ADO.NET之外,还可以使用NHibernate这个Hibernate在.NET中的实现ORM,

集成 NHibernate

ABP 基础设施层——集成 NHibernate 本文翻译自ABP的官方教程<NHibernate Integration>,地址为:http://aspnetboilerplate.com/Pages/Documents/NHibernate-Integration ABP可以与任何ORM框架协同工作,它内置了对NHibernate的集成支持.本文将介绍如何在ABP中使用NHibernate.本文假定你已经初步掌握了NHibernate. 译者注:怎么才算初步掌握了NHibernate呢?译

ABP 基础设施层——集成 NHibernate

本文翻译自ABP的官方教程<NHibernate Integration>,地址为:http://aspnetboilerplate.com/Pages/Documents/NHibernate-Integration ABP可以与任何ORM框架协同工作,它内置了对NHibernate的集成支持.本文将介绍如何在ABP中使用NHibernate.本文假定你已经初步掌握了NHibernate. 译者注:怎么才算初步掌握了NHibernate呢?译者认为应当懂得使用NHibernate进行CRUD

跟我学 NHibernate (二)

1. 在 NHibernate 中使用事务, 主要代码如下: #region 事务 public IList<Customer> GetAll() { // 开启事物 using (ITransaction tx = _session.BeginTransaction()) { try { //提交事务 tx.Commit(); return null; } catch (HibernateException ex) { // 回滚事务 tx.Rollback(); throw ex ; }

ORM利器:NHibernate(三)五部曲+简单对象CRUD+HQL

前面的两篇文章中,我们对NHibernate已经做了大致了解 <ORM利器:NHibernate(一)简介>Nhibernate的作用:解决了对象和数据库的转化问题 <ORM利器:NHibernate(二)使用CodeSmith快速生成映射文件和映射类>利用CodeSmith由表导出映射类(就是通常所说的Entity)和映射文件(告诉你表和对象之间是如何建立一一对应的关系的). 接下来将会对NHibernate的使用做Demo解析,分为五部曲: 创建表.若要把对象转换为数据库中的表

NHibernate之旅(18):初探代码生成工具使用

本节内容 引入 代码生成工具 结语 引入 我们花了大量的篇幅介绍了相关NHibernate的知识.一直都是带着大家手动编写代码,首先创建数据库架构.然后编写持久化类和映射文件,最后编写数据操作方法.測试方法. 这是典型的数据库驱动开发(DbDD,Database-Driven Developent)技术.可是自己不是这样做的,我先编写持久化类和映射文件,然后偷偷的使用SchemaExport工具把数据库生成了.按上面的步骤写文章的,关于SchemaExport工具就是下一篇的事情了,这篇说说利用

NHibernate中的API

本篇文章介绍的是NHibernate的各种API及其作用. 下图描述了NHibernate的API在分层架构中的作用,下面将进行详细说明. NHibernate的接口大致分为四类:1.  被应用程序调用进行基本数据操作(增.删.改.查)的接口.这些接口是应用程序的业务逻辑层和控制层与NHibernate的主要交互点.ISession, ITransaction, IQuery和ICriteria属于此类.2. 被应用程序用来配置NHibernate的接口.Configuration就属此类.3.

NHibernate动态加载资源文件

最近做项目,又用到了以前做过的ORM框架--NHibernate. 此次想要实现的目标: 1.简单SQL用NHibernate的Session的CRUD方法实现 2.复杂SQL用Native SQL实现 3.数据库可能有多个,且有可能是不同的数据库类型,如A系统用Oracle,B系统用MSSQL (第一点很简单,可以参照其他博客:本节主要记录第二点第三点,关于如何配置多数据库下次记录) 复杂SQL的实现,且针对不同数据库,那么需要加载不同的资源文件. 关于资源文件,请参考http://blog.

【转载】ADO.NET与ORM的比较(3):Linq to SQL实现CRUD

[转载]ADO.NET与ORM的比较(3):Linq to SQL实现CRUD 说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操作数据库之外,大量的书籍中都是讲述使用Hibernate这个ORM工具来操作数据.在.NET中操作数据库的方式有多种,除了最直接的方式就是使用ADO.NET之外,还可以使用NHibernate这个Hibernate在.NET中的实现ORM,如果你对第