NHibernate初步使用
1.创建一个网站项目:QuickStart
2.引用程序集:NHibernate.dll
3.更改配置文件加入以下节点:
<configSections>
<section
name="hibernate-configuration"
type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/>
</configSections>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory name="QuickStart">
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Server=.;initial catalog=Quickstart;Integrated Security=True</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<mapping assembly="QuickStart"/>
</session-factory>
</hibernate-configuration>
4.创建模型类:
namespace QuickStart.Models
{
public class Cat
{
private string id;
private string name;
private char sex;
private float weight; public Cat()
{
} public virtual string Id
{
get { return id; }
set { id = value; }
} public virtual string Name
{
get { return name; }
set { name = value; }
} public virtual char Sex
{
get { return sex; }
set { sex = value; }
} public virtual float Weight
{
get { return weight; }
set { weight = value; }
}
}
}
在这里注意我的命名空间为:
QuickStart.Models
5.映射模型类,加入一个xml文件,注意需要在vs里右键设置属性为:嵌入的资源

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="QuickStart.Models" //注意这里的namespace为模型类的命名空间--QuickStart.Models assembly="QuickStart">
<class name="Cat" table="Cat"> <!-- A hex character is our surrogate key. It's automatically
generated by NHibernate with the UUID pattern. -->
<id name="Id">
<column name="CatId" sql-type="char(32)" not-null="true"/>
<generator class="uuid.hex" />
</id> <!-- A cat has to have a name, but it shouldn' be too long. -->
<property name="Name">
<column name="Name" length="" not-null="true" />
</property>
<property name="Sex" />
<property name="Weight" />
</class> </hibernate-mapping>
这里需要注意指定namespace为模型类所在的命名空间.
6.在数据库中创建一样结构的数据表.
CREATE TABLE [dbo].[Cat](
[CatId] [char]() NOT NULL,
[Name] [nvarchar]() NOT NULL,
[Sex] [nchar]() NULL,
[Weight] [real] NULL,
CONSTRAINT [PK_Cat] PRIMARY KEY CLUSTERED
(
[CatId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
7.之后的操作就简单了,先创建一个NHibernateHelper.cs的类:
using System.Web;
using NHibernate;
using NHibernate.Cfg; namespace QuickStart.Helper
{
public sealed class NHibernateHelper
{
private const string CurrentSessionKey = "nhibernate.current_session";
private static readonly ISessionFactory sessionFactory; static NHibernateHelper()
{
sessionFactory = new Configuration().Configure().BuildSessionFactory();
} public static ISession GetCurrentSession()
{
HttpContext context = HttpContext.Current;
ISession currentSession = context.Items[CurrentSessionKey] as ISession; if (currentSession == null)
{
currentSession = sessionFactory.OpenSession();
context.Items[CurrentSessionKey] = currentSession;
} return currentSession;
} public static void CloseSession()
{
HttpContext context = HttpContext.Current;
ISession currentSession = context.Items[CurrentSessionKey] as ISession; if (currentSession == null)
{
// No current session
return;
} currentSession.Close();
context.Items.Remove(CurrentSessionKey);
} public static void CloseSessionFactory()
{
if (sessionFactory != null)
{
sessionFactory.Close();
}
}
}
}
8.开始操作,自己随便创建一个控制器验证代码是否可以顺利运行:
public class HomeController : Controller
{
//
// GET: /Home/ public string Index()
{
ISession session = NHibernateHelper.GetCurrentSession(); NHibernate.ITransaction tx = session.BeginTransaction(); Cat princess = new Cat();
princess.Name = "Princess";
princess.Sex = 'F';
princess.Weight = 7.4f; session.Save(princess);
tx.Commit(); NHibernateHelper.CloseSession();
return "";
} public string Query()
{
ISession session = NHibernateHelper.GetCurrentSession();
NHibernate.ITransaction tx = session.BeginTransaction(); IQuery query = session.CreateQuery("select c from Cat as c where c.Sex = :sex");
query.SetCharacter("sex", 'F');
foreach (Cat cat in query.Enumerable())
{
Response.Write("Name="+cat.Name);
} tx.Commit();
return "";
} }
9.结果如下:

10.项目结构如下:

NHibernate初步使用的更多相关文章
- 01-08-01【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate中的三种状态
以下属于不明来源资料: 引入 在程序运行过程中使用对象的方式对数据库进行操作,这必然会产生一系列的持久化类的实例对象.这些对象可能是刚刚创建并准备存储的,也可能是从数据库中查询的,为了区分这些对象,根 ...
- [转]NHibernate之旅(12):初探延迟加载机制
本节内容 引入 延迟加载 实例分析 1.一对多关系实例 2.多对多关系实例 结语 引入 通过前面文章的分析,我们知道了如何使用NHibernate,比如CRUD操作.事务.一对多.多对多映射等问题,这 ...
- [转]NHibernate之旅(9):探索父子关系(一对多关系)
本节内容 引入 NHibernate中的集合类型 建立父子关系 父子关联映射 结语 引入 通过前几篇文章的介绍,基本上了解了NHibernate,但是在NHibernate中映射关系是NHiberna ...
- [转]NHibernate之旅(3):探索查询之NHibernate查询语言(HQL)
本节内容 NHibernate中的查询方法 NHibernate查询语言(HQL) 1.from子句 2.select子句 3.where子句 4.order by子句 5.group by子句 实例 ...
- 集成 NHibernate
ABP 基础设施层——集成 NHibernate 本文翻译自ABP的官方教程<NHibernate Integration>,地址为:http://aspnetboilerplate.co ...
- 基于NHibernate二级缓存的MongoDB组件
设计一套基于NHibernate二级缓存的MongoDB组件(上) 摘要:NHibernate Contrib 支持很多第三方的二级缓存,如SysCache,MemCache,Prevalence ...
- NHibernate教程(20)——二级缓存(上)
本节内容 引入 介绍NHibernate二级缓存 NHibernate二级缓存提供程序 实现NHibernate二级缓存 结语 引入 上一篇我介绍了NHibernate内置的一级缓存即ISession ...
- NHibernate教程(19) —— 一级缓存
本节内容 引入 NHibernate一级缓存介绍 NHibernate一级缓存管理 结语 引入 大家看看上一篇了吗?对象状态.这很容易延伸到NHibernate的缓存.在项目中我们灵活的使用NHibe ...
- NHibernate教程(18)--对象状态
本节内容 引入 对象状态 对象状态转换 结语 引入 在程序运行过程中使用对象的方式对数据库进行操作,这必然会产生一系列的持久化类的实例对象.这些对象可能是刚刚创建并准备存储的,也可能是从数据库中查询的 ...
随机推荐
- Front-End(五)——工具使用
mac端推荐使用sublime+emmet. 环境搭建 sublime 官网下载sublime text 02或者03,03现在(2016.07)还是测试版,我使用的是text02. emmet su ...
- ASP.NET中重复表格列合并的实现方法(转自脚本之家)
这几天做一个项目有用到表格显示数据的地方,客户要求重复的数据列需要合并,就总结了一下.NET控件GridView 和 Repeater 关于重复数据合并的方法. 这是合并之前的效果: 合并之后的效果图 ...
- 敏捷开发(五)- 框架SCRUM内容
本文主要是为了检测你对SCRUM的了解和使用程度,通过本文你可以检测一下 1.你们的SCRUM项目中各个角色是否合格, 2.SCRUM上面需要的会议是否有遗留,会议过程是否正确 3 ...
- socket编程之TCP/UDP
目标: 1.编写TCP服务端客户端,实现客户端发送数据,服务端接收打印 2.采用OOP方式编写TCP服务端客户端,实现客户端发送数据,服务端添加时间戳,返回给客户端 3.采用OOP方式编写UDP服务端 ...
- 去掉UItableview section headerview黏性
UITabelView在style为plain时,在上拉是section始终粘在最顶上而不是跟随滚动而消失或者出现 可以通过设置UIEdgeInsetsMake: - (void)scrollView ...
- ActiveMQ in Action(6) - Features
关键字: activemq 2.6 Features ActiveMQ包含了很多功能强大的特性,下面简要介绍其中的几个.2.6.1 Exclusive Consumer Queue中的消息 ...
- 面试题-Java基础-线程部分
1.进程和线程的区别是什么? 进程是执行着的应用程序,而线程是进程内部的一个执行序列.一个进程可以有多个线程.线程又叫做轻量级进程. 2.创建线程有几种不同的方式?你喜欢哪一种?为什么? 有三种方式可 ...
- python 主机宝
需求:开发一个主机批量管理系统,要求按saltstack方式执行命令 #!/usr/bin/env python3. # -*- coding:utf8 -*- import os,sys,pickl ...
- 数据库连接池druid
推荐一个带监控的数据库连接池druid,阿里的,据说比c3p0连接池性能要好点,主要是带sql,spring,uri等访问监控,比较直观地址: https://github.com/alibaba/d ...
- WinForm 进程和线程
进程: //进程用到的类Process,需要进行解析 using System.Diagnostics Process.Start("calc");//Process是非静态方法, ...