NHibernate 基本配置 (第一篇)
使用NHibernate最重要的一步就是配置,如果连NHibernate都还没有跑的起来,谈何学习。今天就来详解一下NHibernate的配置。
一、NHibernate基本配置
NHibernate配置要注意的有:
1、NHibernate需要一个自定义的配置节点,一般放在Web.config里或App.config里面,当然你可以自己定义实际位置。
示例如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name ="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler,NHibernate"/> (1)
</configSections>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="Dao">
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> (2)
<property name="connection.connection_string">
Data Source=KISSDODOG-PC;Initial Catalog=Test;uid=sa;pwd=123; (3)
</property>
<property name ="dialect">NHibernate.Dialect.MsSql2008Dialect</property> (4)
<mapping assembly ="Model"/> (5)
</session-factory>
</hibernate-configuration>
</configuration>

(1)、声明自定义配置节点
name:自定义配置节点名称。
type:处理程序位置。
(2)、声明是哪一个数据库驱动程序。
(3)、数据库连接。
(4)、所使用的SQL方言,通过这个方言,NHibernate才知道要将你写的查询语句,翻译成何种数据库的SQL语句。
(5)、设定映射文件默认所在的程序集。‘
NHibernate的配置节点并不止5个,想知道更详细的配置节点说明:http://www.cnblogs.com/kissdodog/archive/2013/02/21/2919873.html
另外,这一个配置节点文件,并不一定要放在Web.config或App.config里,例如你可以定义一个hibernate.cfg.xml文件,然后创建ISessionFactory时指定位置:
ISessionFactory sessionFactory = new Configuration().Configure(AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "hibernate.cfg.xml").BuildSessionFactory();
这里要小心"new Configuration().Configure()",如果没有Configure("xxx.cfg.xml")就是从配置文件加载,有就是从自定义文件(如:xxx.cfg.xml)加载。
注意,此hibernate.cfg.xml文件名可以随意起,但是要设置为始终复制。否则将报告如下错误:
An exception occurred during configuration of persistence layer.
2、NHibernate的映射文件一定要设为嵌入的资源。

3、NHibernate的实体类所有的属性都要加上virtual-虚属性,具体将在持久化类的文章中说明,下面给个例子:
public class PersonModel
{
public virtual int Id { get; set; } public virtual string Name { get; set; }
}
NHibernate作为一个ORM框架,它需要知道如何将数据库的表与对应的实体类相关联,NHibernate通过映射文件的方式来获得这方面的信息。
二、获取映射文件相关配置
NHibernate中的映射文件以hbm.xml为后缀结束,NHibernate获取映射文件的方法有3种方法。
1、从config程序配置文件获取映射文件位置
NHibernate运行在.Net程序上,需要自己提供一个自定义配置节点,这个配置节点里面包含了数据库连接,什么数据库等等信息。其中就包括了配置文件所在位置的信息。
NHibernate会直接从Web.config或App.config文件上的配置节点上读取这个节点,然后从节点指定的程序集去查找映射文件。
<mapping assembly ="Nx.Repository"/>
以上这个配置节点所保存的就是映射文件默认所在的程序集。这样当程序启动时,NHibernate就会自动去Nx.Repository寻找*.hbm.xml映射文件。
如果NHibernate找不到映射文件,则可能会报如下错误:
“/”应用程序中的服务器错误。
No persister for: xxx.xxx
2、编程的方式,写在代码里
(1)、AddFile 指定映射文件
ISessionFactory sessionFactory = new Configuration().Configure().AddFile(@"C:\Users\Administrator\Desktop\NHibernate学习\Model\Mapping\Person.hbm.xml").BuildSessionFactory();
注意,当你不写全路径的时候,也就是只写个文件名,那么NHibernate就会从配置文件读取程序集,到配置文件中指定的程序集去加载此映射文件。如果配置文件并不指定程序集,那么就从当前程序集中查找指定名的映射文件。但这种方式,不必设置嵌入的资源,但要记得设置为始终复制。
Configuration cfg = new Configuration().AddFile("Mapping/Person.hbm.xml");
ISessionFactory sessionFactory = cfg.BuildSessionFactory();
这种方法只是指定一个文件,但是可以链式指定多个如:AddFile("f1").AddFile("f2")。
(2)、AddAssembly
还有另外一种方法,在创建Configuration时指定程序集。
Configuration cfg = new Configuration().AddAssembly("Model"); //Model为映射文件所在程序集名称
ISessionFactory sessionFactory = cfg.BuildSessionFactory();
这种方法,即使.config配置文件里<mapping assembly=""/>节点为空也没关系,NHibernate会自动到指定的程序集里查找所有以.hbm.xml结尾的文件。
(3)、AddClass
这种方式,可以消除程序对文件路径字符串的硬编码。
Configuration cfg = new Configuration().AddClass(typeof(Model.Person));
ISessionFactory sessionFactory = cfg.BuildSessionFactory();
但是缺点也非常明显,类名必须与映射文件的名称相同。不然,编译就无法通过,因为Person类都找不到。另外,映射文件Person.hbm.xml必须放在根目录。
NHibernate会自动到程序中去查找名为Person.hbm.xml文件。
NHibernate 基本配置 (第一篇)的更多相关文章
- 【MM系列】SAP MM模块-基础配置第一篇
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-基础配置第一篇 ...
- SaltStack介绍及简单配置-第一篇
SaltStack介绍 一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯. salt底层采用动态的连接总线, 使其可以用于编配 ...
- 从零开始使用git第一篇:下载安装配置
从零开始使用git 第一篇:下载安装配置 第一篇:从零开始使用git第一篇:下载安装配置 第二篇:从零开始使用git第二篇:git实践操作 第三篇:从零开始使用git第三篇:git撤销操作.分支操作和 ...
- CDH6.2安装配置第二篇:CDH安装的前期配置
本篇介绍cdh安装之前需要的一些必要配置,当然这些配置也可以用shell脚本来配置.在安装之前请先配置好yum源,在文中用的统一都是阿里源.在安装的时候,要确保主机的内存是4G以上,要不然会无限重启c ...
- “MVC+Nhibernate+Jquery-EasyUI”信息发布系统 第一篇
一.第一篇内容中必须得简单的介绍一下MVC(在大学时用的是WebForm,拖控件感觉很爽,但是工作后,技术总监让一定要放弃这种 想法!) 1.MVC是什么?:(1) ASP.NET MVC是微软官方提 ...
- 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)
从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...
- 国内第一篇详细讲解hadoop2的automatic HA+Federation+Yarn配置的教程
前言 hadoop是分布式系统,运行在linux之上,配置起来相对复杂.对于hadoop1,很多同学就因为不能搭建正确的运行环境,导致学习兴趣锐减.不过,我有免费的学习视频下载,请点击这里. hado ...
- 分布式文件系统 FastDFS 5.0.5 & Linux CentOS 7 安装配置(单点安装)——第一篇
分布式文件系统 FastDFS 5.0.5 & Linux CentOS 7 安装配置(单点安装)--第一篇 简介 首先简单了解一下基础概念,FastDFS是一个开源的轻量级分布式文件系统,由 ...
- 第一篇 Windows 8 开发Windows Metro style app环境配置
半 饱问 题 到 我 这 里 为 止! 第一篇 Windows 8 开发Windows Metro style app环境配置 2012-09-24 08:24 by 半饱, 1289 阅读, 3 ...
随机推荐
- c++ 子类调用父类构造方法 调用父类方法 类声明与实现分离
Person.h #pragma once #include "stdafx.h" #include<iostream> class Person { private: ...
- jq获取鼠标位置
jq获取鼠标位置 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 限制非安全IP访问
这个是一个检测ip是否非法的php函数,适应于白名单,黑名单功能开发,主要场景应用于:api来源限制,访问限制等. /** * 安全IP检测,支持IP段检测 * @param string $ip 要 ...
- 第八篇:SOUI中控件事件的响应
SOUI中提供了大部分常用的win32标准控件的实现,如pushbutton, checkbox, radiobox, edit, richedit, listbox, combobox, treec ...
- 【项目经验】--EasyUI DataGrid之右键菜单
前两天验收项目,老总提了一个不是需求的需求,为什么这么说呢?因为我们的管理不到位!话说当天,我们UI系统下发了一个总文件,上面写着"各个系统找一个没有添加UI的模块去添加最新版本UI进行测试 ...
- SecureCRT中文显示乱码
环境:SecureCRT登陆REDHAT5.3 LINUX系统 问题:vi编辑器编辑文件时文件中的内容中文显示乱码,但是直接使用linux系统terminal打开此文件时中文显示正常,确诊问题出现在客 ...
- loadrunner通过字符串左右边界切割字符串
void web_reg_save_param_custom(char *sourceStr, char* outpuStr, char *leftBdry, char *rightBdry){ ...
- css新增选择器
- mongodb学习04 操作详解(2)
查找文档 筛选查找 db.collection.find(); 返回一个集合中文档的子集,子集的 范围从 0 个文档到整个集合; db.collection.findOne(); 返回筛选的一个文档; ...
- Minitab中相关系数R-Sq和修正R-Sq(adj)的意思,计算公式和区别[转载]
转载自:http://www.pinzhi.org/thread-7762-1-1.html Minitab中相关系数R-Sq和修正的相关系数R-Sq(adj)的意思,计算公式和区别 在Minitab ...