01-03-02-1【Nhibernate (版本3.3.1.4000) 出入江湖】CRUP操作--cascade 级联相关
要点:
1.
<!--双向关联时要用:
inverse:由子表来维护关系,cascade:级联的关系 如果没有这个设置,
插入Customer成功(即使现在Order插入Order抛异常,这时产生了垃圾数据,
好的做法是用事务两者都能插入,避免垃圾数据的产生-->
<!--经测试:只需要在主表配置cascade="all",而子表不用配置cascade="all",
当删除主表实体时,子表的级联实体也会被删除-->
<!--cascade有4种??是吗??,分别表示级联操作的4种操作:
cascade = "none": 不能执行操作(有子时不给删父),经测试,为none时,添加父时没有自动添加子
cascade = "all" : 1.级联(删父时删子),经测试,为all时,添加父时自动添加子,
2.经测试,当设置cascade = "all",MS SQL Server设置删除和更新操作虽然设置为:不执行操作,却被覆盖为联级
cascade = "null": (删父时子设置为null),但经测试Nhibernate不支持这个值
cascade = "???": 删父时子设置为默认值-->
- <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>
- 2
Custmer.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; }
- }
- }
- }
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="">
- <!--unsaved-value="" 主键表中不需要定义,而是需要在子表中定义-->
- <id name="CustomerId"
- column="CustomerId"
- type="Int32"
- unsaved-value="">
- <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="" 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种??是吗??,分别表示级联操作的4种操作:
- cascade = "none": 不能执行操作(有子时不给删父),经测试,为none时,添加父时没有自动添加子
- cascade = "all" : .级联(删父时删子),经测试,为all时,添加父时自动添加子,
- .经测试,当设置cascade = "all",MS SQL Server设置删除和更新操作虽然设置为:不执行操作,却被覆盖为联级
- cascade = "null": (删父时子设置为null),但经测试Nhibernate不支持这个值
- cascade = "???": 删父时子设置为默认值-->
- <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.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; }
- }
- }
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="" 主键表中不需要定义,而是需要在子表中定义
- unsaved-value id的类型是对象类型(如Int32等)unsaved-value不用显示标出来,因为unsaved-value默认值是null
- unsaved-value默认值是null,
- 作用是:用于判断实体对象是新new的内存对象,还是应经持久化的对象,Nhibernate会从数据库中去获取
- 该实体对象的Id与unsaved-value的值比较(如果持久化,id不等于null,当然也就不等于默认值为unsaved-value):
- .实体对象的Id与unsaved-value的值,相等,说明调用Save()添加,
- .实体对象的Id与unsaved-value的值,不相等相等,调用Update(),
- 并在如果
- -->
- <class name="Model.Order, Model"
- table ="[Order]"
- discriminator-value="" lazy="false">
- <id name="OrderId"
- column="OrderId"
- type="Int32"
- unsaved-value="">
- <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>
01-03-02-1【Nhibernate (版本3.3.1.4000) 出入江湖】CRUP操作--cascade 级联相关的更多相关文章
- 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-01-01【Nhibernate (版本3.3.1.4000) 出入江湖】配置文件
默认配置文件名称是:hibernate.cfg.xml 放置在应用程序集的根目录下 <?xml version="1.0" encoding="utf-8" ...
- 01-04-02【Nhibernate (版本3.3.1.4000) 出入江湖】HQL查询
public IList<Customer> GetAllHql() { IList<Customer> result = null; ISession session = _ ...
- 01-07-01【Nhibernate (版本3.3.1.4000) 出入江湖】并发控制
Nhibernate 并发控制 [1]悲观并发控制 正在使用数据的操作,加上锁,使用完后解锁释放资源. 使用场景:数据竞争激烈,锁的成本低于回滚事务的成本 缺点:阻塞,可能死锁 [2]乐观并发控制: ...
- 01-03-03【Nhibernate (版本3.3.1.4000) 出入江湖】cascade的测试
相关文章: http://www.cnblogs.com/amboyna/archive/2008/02/18/1072260.html注意上面是hibernate,不是Nhibernate,这解释是 ...
- 01-03-01【Nhibernate (版本3.3.1.4000) 出入江湖】id标签的unsaved-value属性
父表 <class name="Model.Customer, Model" discriminator-value="0"> <!--uns ...
- 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>元素提供了很多属性,可以用 ...
随机推荐
- java检测端口号是否配占用
java检测端口号是否被占用的工具类: package com.frank.util; import java.io.IOException; import java.net.InetAd ...
- 杭电ACM2098--分拆素数和
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2098 这是源码.其实我本不想拿出源码,毕竟源码很容易被复制. 我这里刚开始出错的地方有 0_0_12811 ...
- iOS开发之窗口和视图
视图就是应用程序的界面.视图可以使用nib文件实现,也可以使用代码创建.一个视图也是一个响应器(UIResponder的子类)这意味着一个视图可以与用户交互.因此,视图不只是用户可看到的界面,也是可以 ...
- 全面解析SQL SERVER 的左右内连接
SQL SERVER数据库的三种常用连接解析: 这里先给出一个官方的解释: left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右 ...
- JavaScript 同源策略
在JavaScript安全性限制Same-Origin Policy(同源策略)=>JavaScript只能访问与包含它的文档在同一域下的内容. 同源=>域名+协议+端口相同.
- iTerm2 颜色配置
1. 首先找到配色文件: iterm2官网配色方案iTerm2-Color-Schemes altercation的 solarized配色方案solarized 2. 配置步骤: clone上面的 ...
- [大牛翻译系列]Hadoop(10)MapReduce 性能调优:诊断reduce性能瓶颈
6.2.3 Reduce的性能问题 Reduce的性能问题有和map类似的方面,也有和map不同的方面.图6.13是reduce任务的具体的执行各阶段,标识了可能影响性能的区域. 这一章将介绍影响re ...
- [大牛翻译系列]Hadoop(2)MapReduce 连接:复制连接(Replication join)
4.1.2 复制连接(Replication join) 复制连接是map端的连接.复制连接得名于它的具体实现:连接中最小的数据集将会被复制到所有的map主机节点.复制连接有一个假设前提:在被连接的数 ...
- linux 终端显示 -bash-4.1
解决方法: cp /etc/skel/.bashrc /root/ cp /etc/skel/.bash_profile /root/ 重新登陆就OK了
- php intval()函数
格式:int intval(mixed $var [, int $base]); 1.intval()的返回值是整型,1或者0.可作用于数组或者对象(对象报错信息:Notice: Object of ...