.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的,不是长连接。


                     个人感觉就这么多啦。。

            









                               

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值