01-01-01【Nhibernate (版本3.3.1.4000) 出入江湖】配置文件

默认配置文件名称是:hibernate.cfg.xml
放置在应用程序集的根目录下
<?xml version="1.0" encoding="utf-8"?>
<!--
This template was written to work with NHibernate.Test.
Copy the template to your NHibernate.Test project folder and rename it in hibernate.cfg.xml and change it
for your own use before compile tests in VisualStudio.
-->
<!-- This is the System.Data.dll provider for SQL Server -->
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="NHibernate.Test123456">
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string"> <!--用于测试自动生成数据库表(不自动生成数据库)-->
<!--<property name="hbm2ddl.auto">update</property>-->
Server=(local);initial catalog=NHibernateSampleAutoCreateTable;Integrated Security=SSPI <!--Server=(local);initial catalog=NHibernateSample;Integrated Security=SSPI-->
</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property> <!--输出所有的SQL语句到控制台,一般开发打开这个-->
<property name="show_sql">true</property>
<!--整齐的SQL输出到控制台-->
<property name="format_sql">true</property> <!--自动生成数据库表(不自动生成数据库)-->
<property name="hbm2ddl.auto">update</property> <!--实体类所在的程序集-->
<mapping assembly="Model"/>
</session-factory>
</hibernate-configuration>
实体的映射文件 xxx.hbm.xml 文件满足:
1.只要和实体类在同一个程序就行,在什么目录里面没要求
2.右键-.xxx.hbm.xml---属性---“生成操作”属性设置为“嵌入式资源”
3.与实体类同名,如:实体类名是Customer,那映射文件就是Customer.hbm.xml
Customer.cs
using Iesi.Collections.Generic;
using System;
using System.Linq;
using System.Text; namespace Model
{
public class Customer
{
public virtual int CustomerId{ get; set; }
public virtual String FirstName { get; set; }
public virtual String LastName { get; set; } public virtual int Age { get; set; }
public virtual int Version { get; set; } private ISet<Order> _orders = new HashedSet<Order>();
public virtual ISet<Order> Orders
{
get { return _orders; }
set { this._orders = value; }
} }
}
Order.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Model
{
public class Order
{
public virtual int OrderId { get; set; }
public virtual DateTime OrderDate { get; set; }
public virtual Customer Customer { get; set; } public virtual int Version { get; set; }
}
}
Customer.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="Model"
assembly="Model"
default-lazy="true"> <class name="Model.Customer, Model"
discriminator-value="0">
<!--unsaved-value="0" 主键表中不需要定义,而是需要在子表中定义-->
<id name="CustomerId"
column="CustomerId"
type="int"
unsaved-value="0">
<generator class="native" />
<!-- unsaved-value used to be null and generator was increment in h2.0.3 -->
</id> <!--version标签必须放在Id后面,否则出错-->
<version name="Version"/> <property name="FirstName" >
<column name="Firstname" length="50" not-null="true"/>
</property> <property name="LastName" type="String">
<column name="Lastname"/>
</property> <property name="Age" type="int">
<column name="Age"/>
</property> <!--双向关联时要用:
inverse:由子表来维护关系,cascade:级联的关系 如果没有这个设置,
插入Customer成功(即使现在Order插入Order抛异常,这时产生了垃圾数据,
好的做法是用事务两者都能插入,避免垃圾数据的产生-->
<!--经测试:只需要在主表配置cascade="all",而子表不用配置cascade="all",
当删除主表实体时,子表的级联实体也会被删除-->
<!--cascade有几种??是吗??,分别表示级联操作的4种操作:
cascade = "none": 不能执行操作(有子时不给删父),经测试,为none时,添加父时没有自动添加子
cascade = "delete" : 1.级联(删父时删子),经测试,为delete时,添加父时自动添加子,
2.经测试,当设置cascade = "all",MS SQL Server设置删除和更新操作虽然设置为:不执行操作,却被覆盖为联级
cascade = "null": (删父时子设置为null),但经测试Nhibernate不支持这个值
cascade = "???": 删父时子设置为默认值
cascade = "save-update":
cascade = "delete":
cascade = "all":
cascade = "all-delete-orphan":
-->
<set name="Orders" table="Order" generic="true"
inverse="true" cascade="all">
<key column="CustomerId" foreign-key="FK_CustomerOrders"/>
<one-to-many class="Model.Order,Model"/>
</set>
</class>
</hibernate-mapping>
Order.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="Model"
assembly="Model"
default-lazy="true"> <!--table ="[Order]"因为Order是SQL关键字,表名如果不添加中括号[]会抛异常-->
<!--unsaved-value="0" 主键表中不需要定义,而是需要在子表中定义
unsaved-value id的类型是对象类型(如Int32等)unsaved-value不用显示标出来,因为unsaved-value默认值是null
unsaved-value默认值是null,
作用是:用于判断实体对象是新new的内存对象,还是应经持久化的对象,Nhibernate会从数据库中去获取
该实体对象的Id与unsaved-value的值比较(如果持久化,id不等于null,当然也就不等于默认值为unsaved-value): 1.实体对象的Id与unsaved-value的值,相等,说明调用Save()添加,
2.实体对象的Id与unsaved-value的值,不相等相等,调用Update(), 并在如果
-->
<class name="Model.Order, Model"
table ="[Order]"
discriminator-value="0" lazy="false">
<id name="OrderId"
column="OrderId"
type="int"
unsaved-value="0">
<!-- unsaved-value="0">-->
<generator class="native" />
<!-- unsaved-value used to be null and generator was increment in h2.0.3 -->
</id> <!--version标签必须放在Id后面,否则出错-->
<!--<version name="Version"/>--> <property name="OrderDate" type="DateTime" not-null="true">
<column name="OrderDate" />
</property> <many-to-one name="Customer" not-null="true">
<column name="CustomerId" />
</many-to-one> </class>
</hibernate-mapping>
其他:
为了使用NHibernate时有输入提示,得在:
D:\Program Files (x86)\Microsoft Visual Studio 12.0\Xml\Schemas
添加下载的NHibernate安装包中的两文件:
nhibernate-configuration.xsd
nhibernate-mapping.xsd
01-01-01【Nhibernate (版本3.3.1.4000) 出入江湖】配置文件的更多相关文章
- 01-08-05【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate二级缓存:第三方MemCache缓存
一.准备工作 [1]根据操作系统(位数)选择下载相应版本的MemCache, MemCache的下载和安装,参看: http://www.cnblogs.com/easy5weikai/p/37606 ...
- 01-03-02-2【Nhibernate (版本3.3.1.4000) 出入江湖】CRUP操作-Save方法的一些问题
此文由于当时不知道NHibernate的Sava方法不是更新操作,不知道Save就是Add,造成如下荒唐的求证过程,但结论是对的 ,可报废此文,特此声明. NHibernate--Save方法: Cu ...
- 01-07-01【Nhibernate (版本3.3.1.4000) 出入江湖】并发控制
Nhibernate 并发控制 [1]悲观并发控制 正在使用数据的操作,加上锁,使用完后解锁释放资源. 使用场景:数据竞争激烈,锁的成本低于回滚事务的成本 缺点:阻塞,可能死锁 [2]乐观并发控制: ...
- 01-08-03【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之缓存管理
http://www.cnblogs.com/lyj/archive/2008/11/28/1343418.html 管理NHibernate二级缓存 NHibernate二级缓存由ISessionF ...
- 01-08-04【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之命名缓存
http://www.cnblogs.com/lyj/archive/2008/11/28/1343418.html 可以在映射文件中定义命名查询,<query>元素提供了很多属性,可以用 ...
- 01-08-02【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider
第一步骤:hibernate.cfg.xml文件补上如下配置: <?xml version="1.0" encoding="utf-8"?> < ...
- 01-08-01【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate中的一级缓存
缓存的范围? 1.事务范围 事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通常采用相互关联的对象形式.缓存的生命周期依赖于事务的生命周期,只有当事务结束时,缓存的生命周期才会结 ...
- 01-08-01【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate中的三种状态
以下属于不明来源资料: 引入 在程序运行过程中使用对象的方式对数据库进行操作,这必然会产生一系列的持久化类的实例对象.这些对象可能是刚刚创建并准备存储的,也可能是从数据库中查询的,为了区分这些对象,根 ...
- 01-06-01【Nhibernate (版本3.3.1.4000) 出入江湖】事务
Nhibernate事务的使用: public void Add(Customer customer) { ISession session = _sessionManager.GetSession( ...
- 01-05-01-2【Nhibernate (版本3.3.1.4000) 出入江湖】立即加载实现--NHibernateUtil.Initialize()和添加fetch关键字的HQL查询
相关资料: http://www.cnblogs.com/lyj/archive/2008/10/29/1322373.html 问题的提出: 1.延迟加载,可能会引起session已经关闭的异常,例 ...
随机推荐
- 9款大气实用的HTML5/CSS3注册登录表单
1.HTML5/CSS3仿Facebook登录表单 利用CSS3制作的登录表单的确很漂亮,我们在html5tricks网站上也分享过几款了,比如CSS3密码强度验证表单可以显示密码的强度,这款纯CSS ...
- mfc110ud.dll not found
mfc110ud.dll not found while debugging vs2012 MFC application. Possible Solutions: 1) >>>&g ...
- josephus问题
问题描述 n个人围成一圈,号码为1-n,从1开始报数,报到2的退出,剩下的继续从1开始报数,求最后一个人的号码. 算法分析 最直观的算法是用循环链表模拟.从首节点开始,不断删除第二个节点,直到只剩一个 ...
- Linux 内存布局
本文主要简介在X86体系结构下和在ARM体系结构下,Linux内存布局的概况,力求简单明了,不过多深入概念,多以图示的方式来记忆理解,一图胜万言. Technorati 标签: 内存 布局 ...
- sizeWithFont方法被弃用了,该怎么办?
之前使用了NSString类的sizeWithFont:constrainedToSize:lineBreakMode:方法,但是该方法已经被iOS7 Deprecated了,而iOS7新出了一个bo ...
- matlab之图像处理(2)
diagram = imread('lena1.png') diagram = rgb2gray(diagram);%------------------------------将图片转换为灰度图 N ...
- git 的使用(4)-git暂缓区工作区原理和修改删除等命令
文章转载自:http://blog.csdn.net/think2me/article/details/39056379 博主说未经本人允许,不得转载,那就不贴了,拷贝关键部分作备忘 1. 暂存区是G ...
- 【原】去掉UltraGrid第三方控件中的Drag a column header here to group by that column
- Python开发【第一篇】Python基础之反射
反射 反射的作用:反射得作用是提高代码可读行. __import__导入模块和import导入模块的区别: __import__导入模块是通过字符串进行导入. import是常用得导入模块方法. 扩展 ...
- (转)使用getevent监听Android输入设备文件
尊重原创转载请注明:From AigeStudio(http://blog.csdn.net/aigestudio)Power by Aige 侵权必究! 炮兵镇楼 上一节Android事件分发完全解 ...