NHibernate学习笔记

首先,需要引用Iesi.Collections和Nhibernate程序集,或者通过NuGet搜索NHibernate,直接安装程序集,

首先需要创建NHibernate的配置文件,这里是连接MSSQL2012的数据库,所以创建MSSQL相应的配置文件

 1 <hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
 2     <session-factory name="NibernateDemo">
 3         <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
 4         <property name="connection.connection_string">(连接字符串)
 5       Server=NHJLMRQP2B5TBVD\YQSQL2012;Database=TestDB;Uid=;PWD=;
 6     </property>
 7         <property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>(这里填写具体的数据库版本)
 8     <mapping assembly="NibernateDemo.WebUI"/>(程序集名称,告诉程序在哪个程序集下面找这个配置文件)
 9     </session-factory>
10 </hibernate-configuration>
如果这个配置文件的文件名为”hibernate.cfg.xml“,那么在初始化NHibernate的时候,可以直接
_SessionFactory = new Configuration().Configure().BuildSessionFactory();
return _SessionFactory.OpenSession();

获取NHibernate的实例,不用传配置文件的路径。

之后就是创建实体类,和实体类的映射。

比如有个Users表,那么创建一个User类:

namespace NibernateDemo.WebUI.Models
{
    public class User
    {
        public virtual int Id { get; set; }
        public virtual string UserName { get; set; }
        public virtual string Pwd { get; set; }
    }
}

所有的属性都必须有virtual关键字。

之后创建映射关系文件。

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="NibernateDemo.WebUI.Models" assembly="NibernateDemo.WebUI">(User类的命名空间和所在程序集)
  <class name="User" table="Users" lazy="false">(这里的name是之后增删改查时访问的名称,大小写敏感,table为数据库中的表名)
    <id name="Id" column="id" unsaved-value="0">
      <generator class="native" />
    </id>
    <property name="UserName" column="UserName" type="string" length="16" not-null="false"></property>
    <property name="Pwd"  column="Pwd"  type="string" length="32" not-null="false"></property>
  </class>
</hibernate-mapping>

要把这个文件的名称命名为User.hbm.xml,这样就建立起了映射。

查询:

 using (ISession session = NHibernateHelper.GetCurrentSession())
            {
                    IList<User> lstUser = session.CreateQuery("from User u order by u.Id desc").List<User>();
                    return View(lstUser);
            }

增加:

        public ActionResult Add(User model)
        {
      using (ISession session = NHibernateHelper.GetCurrentSession())
            {
                session.Save(model);
            }
     }

删除:

public ActionResult Delete(int id)
        {
            using (ISession session = NHibernateHelper.GetCurrentSession())
            {
                session.CreateQuery(string.Concat("delete User where Id=", id)).ExecuteUpdate();
            }
            return this.Redirect("/usermanager");
        }

修改:

 public ActionResult Update(User model)
        {
            using (ISession session = NHibernateHelper.GetCurrentSession())
            {
                //session.Update(model);
                //IQuery queryUpdate = session.CreateQuery("update User u set u.UserName=:name,u.Pwd=:pwd where u.Id=:id");

                IQuery queryUpdate = session.CreateQuery("update User u set u.UserName=?,u.Pwd=? where u.Id=?");

                //queryUpdate.SetParameter("name", model.UserName);
                //queryUpdate.SetParameter("pwd", model.Pwd);
                //queryUpdate.SetParameter("id",model.Id);

                queryUpdate.SetString(0,model.UserName);
                queryUpdate.SetString(1,model.Pwd);
                queryUpdate.SetInt32(2,model.Id);

                User u = new Models.User();
                queryUpdate.SetProperties(u);
                
                

                queryUpdate.ExecuteUpdate();
            }
            return this.Redirect("/usermanager");
        }

 



posted @ 2013-03-05 15:10  DCLancer  阅读(250)  评论(0编辑  收藏  举报
(function() { var c = document.createElement('script'); c.type = 'text/javascript'; c.async = true; c.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'www.clicki.cn/boot/48212'; var h = document.getElementsByTagName('script')[0]; h.parentNode.insertBefore(c, h); })();