首先,需要引用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"); }