Nhibernate初入门基本配置(二)
转载地址http://www.cnblogs.com/kissdodog/p/3306428.html
使用NHibernate最重要的一步就是配置,如果连NHibernate都还没有跑的起来,谈何学习。今天就来详解一下NHibernate的配置。
一、NHibernate基本配置
NHibernate配置要注意的有:
1、NHibernate需要一个自定义的配置节点,一般放在Web.config里或App.config里面,当然你可以自己定义实际位置。
示例如下:
<configSections>
<section name="hibernate-configuration"
type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"
/>
</configSections>
<!-- Add this element -->
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.connection_string">
Data Source=.;Initial Catalog=Zhijiao;Integrated Security=True
</property>
<mapping assembly="zhijiao" />
</session-factory>
</hibernate-configuration>
实体类
namespace zhijiao
{
public class NewsPub
{
/// <summary>
/// ID
/// </summary>
public virtual int ID
{
get;
set;
}
/// <summary>
/// NTitle
/// </summary>
public virtual string NTitle
{
get;
set;
}
/// <summary>
/// NContent
/// </summary>
public virtual string NContent
{
get;
set;
}
/// <summary>
/// NDate
/// </summary>
public virtual string NDate
{
get;
set;
}
/// <summary>
/// NHits
/// </summary>
public virtual int NHits
{
get;
set;
}
/// <summary>
/// NType
/// </summary>
public virtual int NType
{
get;
set;
}
/// <summary>
/// NPic
/// </summary>
public virtual string NPic
{
get;
set;
}
}
}
实体类XML
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="zhijiao" assembly="zhijiao">
<class name="zhijiao.NewsPub,zhijiao" table="NewsPub">
<!-- A 32 hex character is our surrogate key. It's automatically
generated by NHibernate with the UUID pattern. -->
<id name="ID" type="Int32">
<column name="ID" not-null="true"/>
<generator class="identity" />
</id>
<!-- A cat has to have a name, but it shouldn' be too long. -->
<property name="NTitle" type="string">
<column name="NTitle" length="50" not-null="true" />
</property>
<property name="NContent" type="string">
<column name="NContent" not-null="true" />
</property>
<property name="NDate" type="StringClob">
<column name="NDate" length="2147483647" not-null="true" />
</property>
<property name="NHits" type="Int32">
<column name="NHits" not-null="true" />
</property>
<property name="NType" type="Int32">
<column name="NType" not-null="true" />
</property>
<property name="NPic" type="string">
<column name="NPic" length="50" not-null="true" />
</property>
</class>
</hibernate-mapping>
加载Nhibernate
private static readonly ISessionFactory sessionFactory = new Configuration().Configure().BuildSessionFactory();
另外,这一个配置节点文件,并不一定要放在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初入门基本配置(二)的更多相关文章
- NHibernate初入门之配置文件属性说明(四)
一.NHibernate配置所支持的属性 属性名 用途 dialect 设置NHibernate的Dialect类名 - 允许NHibernate针对特定的关系数据库生成优化的SQL 可用值: ful ...
- Nhibernate初入门基本配置(一)
文章出处:http://www.cnblogs.com/GoodHelper/archive/2011/02/14/nhiberante_01.html 一.NHibernate简介 什么是?NHib ...
- NHibernate初入门之映射文件配置说明(三)
转载逆心http://www.cnblogs.com/kissdodog/archive/2013/02/21/2919886.html 1. hibernate-mapping 这个元素包括以下可选 ...
- Flume初入门简单配置与使用
1.Flume在集群中扮演的角色 Flume.Kafka用来实时进行数据收集,Spark.Storm用来实时处理数据,impala用来实时查询. 2.Flume框架简介 1.1 Flume提供一个分布 ...
- Kafka初入门简单配置与使用
一 Kafka概述 1.1 Kafka是什么 在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算. 1)Apache Kafka是一个开源消息系统,由Scala写成. ...
- ROS入门笔记(二):ROS安装与环境配置及卸载(重点)
ROS入门笔记(二):ROS安装与环境配置及卸载(重点) [TOC] 1 ROS安装步骤 1.1 ROS版本 ROS目前只支持在Linux系统上安装部署, 它的首选开发平台是Ubuntu. 发布时间 ...
- NHibernate从入门到精通系列
http://www.cnblogs.com/GoodHelper/archive/2011/02/17/1948744.html NHibernate从入门到精通系列(4)——持久对象的生命周期(上 ...
- WCF入门教程(二)如何创建WCF服务
WCF入门教程(二)从零做起-创建WCF服务 通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK默认创建的样本 1.创建WCF服务库 2.看其生成结构 1)IService1.cs(协议) ...
- 分布式消息系统Jafka入门指南之二
分布式消息系统Jafka入门指南之二 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 三.Jafka的文件夹结构 1.安装tree命令 $ sudo yu ...
随机推荐
- Oracle inner join、left join、right join 、+左边或者右边的区别
我们以Oracle自带的表来做例子 主要两张表:dept.emp 一个是部门,一个是员工表结构如下: emp name null? Type Empno not null number(4) enam ...
- CF卡是什么
CF卡(Compact Flash)最初是一种用于便携式电子设备的数据存储设备.作为一种存储设备,它革命性的使用了闪存,于1994年首次由SanDisk公司生产并制定了相关规范.当前,它的物理格式已经 ...
- lodash中_.set的用法
_.set(object, path, value) # Ⓢ Ⓣ Ⓝ 设置对象的路径上的属性值.如果路径不存在,则创建它. 参数 1.object (Object): 待扩大的对象. 2.path ( ...
- Redis的持久化选项
Redis提供了两种不同的持久化方法来将数据存储到硬盘里面.一种方法叫快照(snapshotting),它可以将存在于某一时刻的所有数据都写入硬盘里面.另一种方法叫只追加文件(append-only ...
- C++重载运算符的规则
(1)C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载. 例如,有人觉得BASIC中用“* *”作为幂运算符很方便,也想在C++中将“* *”定义为幂运算符,用“3* *5”表示3 ...
- C语言的复合文字
假设需要向一个带有int型参量的函数传递一个值,这时可以传递一个int型常量,也可以传递一个int型的变量.在C99标准之前,数组参数情况于现在不一样,没有所谓的数组常量可供传递,而在C99中增加了复 ...
- android之PackageManager简介
PackageManager相关 本类API是对所有基于加载信息的数据结构的封装,包括以下功能: 安装,卸载应用查询permission相关信息 查询Application相关信息(applicati ...
- 设置从本地copy文件到远程计算机上
1.运行中输入mstsc.exe调出远程连接桌面,点击选项 2.在“本地资源”选项卡点击“详细信息” 3.勾选“智能卡”下的“驱动器” 4.设置好后,远程计算机就可以复制,粘贴了
- C++输出中文字符(转)
C++输出中文字符 1. cout 场景1: 在源文件中定义 const char* str = "中文" 在 VC++ 编译器上,由于Windows环境用 GBK编码,所以字符串 ...
- ExtJS 4.2学习(一)——环境搭建
1.把JDK集成到myeclipse里: 虽然myeclipse自带了jdk,但我们还是配置自己的JDK1.7 window——>Proferences——>Java——>Compl ...