要点:

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 = "???": 删父时子设置为默认值-->

  1. <set name="Orders" table="Order" generic="true"
  2. inverse="true" cascade="all">
  3.  
  4. <key column="CustomerId" foreign-key="FK_CustomerOrders"/>
  5. <one-to-many class="Model.Order,Model"/>
  6. </set>
  1.  
  2. 2

Custmer.cs

  1. using Iesi.Collections.Generic;
  2. using System;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace Model
  7. {
  8. public class Customer
  9. {
  10. public virtual int CustomerId{ get; set; }
  11. public virtual String FirstName { get; set; }
  12. public virtual String LastName { get; set; }
  13.  
  14. public virtual int Age { get; set; }
  15. public virtual int Version { get; set; }
  16.  
  17. private ISet<Order> _orders = new HashedSet<Order>();
  18. public virtual ISet<Order> Orders
  19. {
  20. get { return _orders; }
  21. set { this._orders = value; }
  22. }
  23.  
  24. }
  25. }

Customer.hbm.xml

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
  3. namespace="Model"
  4. assembly="Model"
  5. default-lazy="true">
  6.  
  7. <class name="Model.Customer, Model"
  8. discriminator-value="">
  9. <!--unsaved-value="" 主键表中不需要定义,而是需要在子表中定义-->
  10. <id name="CustomerId"
  11. column="CustomerId"
  12. type="Int32"
  13. unsaved-value="">
  14. <generator class="native" />
  15. <!-- unsaved-value used to be null and generator was increment in h2.0.3 -->
  16. </id>
  17.  
  18. <!--version标签必须放在Id后面,否则出错-->
  19. <version name="Version"/>
  20.  
  21. <property name="FirstName" >
  22. <column name="Firstname" length="" not-null="true"/>
  23. </property>
  24.  
  25. <property name="LastName" type="String">
  26. <column name="Lastname"/>
  27. </property>
  28.  
  29. <property name="Age" type="int">
  30. <column name="Age"/>
  31. </property>
  32.  
  33. <!--双向关联时要用:
  34. inverse:由子表来维护关系,cascade:级联的关系 如果没有这个设置,
  35. 插入Customer成功(即使现在Order插入Order抛异常,这时产生了垃圾数据,
  36. 好的做法是用事务两者都能插入,避免垃圾数据的产生-->
  37. <!--经测试:只需要在主表配置cascade="all",而子表不用配置cascade="all",
  38. 当删除主表实体时,子表的级联实体也会被删除-->
  39. <!--cascade有4种??是吗??,分别表示级联操作的4种操作:
  40. cascade = "none": 不能执行操作(有子时不给删父),经测试,为none时,添加父时没有自动添加子
  41. cascade = "all" : .级联(删父时删子),经测试,为all时,添加父时自动添加子,
  42. .经测试,当设置cascade = "all",MS SQL Server设置删除和更新操作虽然设置为:不执行操作,却被覆盖为联级
  43. cascade = "null": (删父时子设置为null),但经测试Nhibernate不支持这个值
  44. cascade = "???": 删父时子设置为默认值-->
  45. <set name="Orders" table="Order" generic="true"
  46. inverse="true" cascade="all">
  47.  
  48. <key column="CustomerId" foreign-key="FK_CustomerOrders"/>
  49. <one-to-many class="Model.Order,Model"/>
  50. </set>
  51. </class>
  52. </hibernate-mapping>

Order.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace Model
  7. {
  8. public class Order
  9. {
  10. public virtual int OrderId { get; set; }
  11. public virtual DateTime OrderDate { get; set; }
  12. public virtual Customer Customer { get; set; }
  13.  
  14. public virtual int Version { get; set; }
  15. }
  16. }

Order.hbm.xml

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
  3. namespace="Model"
  4. assembly="Model"
  5. default-lazy="true">
  6.  
  7. <!--table ="[Order]"因为Order是SQL关键字,表名如果不添加中括号[]会抛异常-->
  8. <!--unsaved-value="" 主键表中不需要定义,而是需要在子表中定义
  9. unsaved-value id的类型是对象类型(如Int32等)unsaved-value不用显示标出来,因为unsaved-value默认值是null
  10. unsaved-value默认值是null,
  11. 作用是:用于判断实体对象是新new的内存对象,还是应经持久化的对象,Nhibernate会从数据库中去获取
  12. 该实体对象的Id与unsaved-value的值比较(如果持久化,id不等于null,当然也就不等于默认值为unsaved-value):
  13.  
  14. .实体对象的Id与unsaved-value的值,相等,说明调用Save()添加,
  15. .实体对象的Id与unsaved-value的值,不相等相等,调用Update(),
  16.  
  17. 并在如果
  18. -->
  19. <class name="Model.Order, Model"
  20. table ="[Order]"
  21. discriminator-value="" lazy="false">
  22. <id name="OrderId"
  23. column="OrderId"
  24. type="Int32"
  25. unsaved-value="">
  26. <generator class="native" />
  27. <!-- unsaved-value used to be null and generator was increment in h2.0.3 -->
  28. </id>
  29.  
  30. <!--version标签必须放在Id后面,否则出错-->
  31. <!--<version name="Version"/>-->
  32.  
  33. <property name="OrderDate" type="DateTime" not-null="true">
  34. <column name="OrderDate" />
  35. </property>
  36.  
  37. <many-to-one name="Customer" not-null="true">
  38. <column name="CustomerId" />
  39. </many-to-one>
  40.  
  41. </class>
  42. </hibernate-mapping>

01-03-02-1【Nhibernate (版本3.3.1.4000) 出入江湖】CRUP操作--cascade 级联相关的更多相关文章

  1. 01-08-05【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate二级缓存:第三方MemCache缓存

    一.准备工作 [1]根据操作系统(位数)选择下载相应版本的MemCache, MemCache的下载和安装,参看: http://www.cnblogs.com/easy5weikai/p/37606 ...

  2. 01-03-02-2【Nhibernate (版本3.3.1.4000) 出入江湖】CRUP操作-Save方法的一些问题

    此文由于当时不知道NHibernate的Sava方法不是更新操作,不知道Save就是Add,造成如下荒唐的求证过程,但结论是对的 ,可报废此文,特此声明. NHibernate--Save方法: Cu ...

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

    默认配置文件名称是:hibernate.cfg.xml 放置在应用程序集的根目录下 <?xml version="1.0" encoding="utf-8" ...

  4. 01-04-02【Nhibernate (版本3.3.1.4000) 出入江湖】HQL查询

    public IList<Customer> GetAllHql() { IList<Customer> result = null; ISession session = _ ...

  5. 01-07-01【Nhibernate (版本3.3.1.4000) 出入江湖】并发控制

    Nhibernate 并发控制 [1]悲观并发控制 正在使用数据的操作,加上锁,使用完后解锁释放资源. 使用场景:数据竞争激烈,锁的成本低于回滚事务的成本 缺点:阻塞,可能死锁 [2]乐观并发控制: ...

  6. 01-03-03【Nhibernate (版本3.3.1.4000) 出入江湖】cascade的测试

    相关文章: http://www.cnblogs.com/amboyna/archive/2008/02/18/1072260.html注意上面是hibernate,不是Nhibernate,这解释是 ...

  7. 01-03-01【Nhibernate (版本3.3.1.4000) 出入江湖】id标签的unsaved-value属性

    父表 <class name="Model.Customer, Model" discriminator-value="0"> <!--uns ...

  8. 01-08-03【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之缓存管理

    http://www.cnblogs.com/lyj/archive/2008/11/28/1343418.html 管理NHibernate二级缓存 NHibernate二级缓存由ISessionF ...

  9. 01-08-04【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之命名缓存

    http://www.cnblogs.com/lyj/archive/2008/11/28/1343418.html 可以在映射文件中定义命名查询,<query>元素提供了很多属性,可以用 ...

随机推荐

  1. java检测端口号是否配占用

    java检测端口号是否被占用的工具类:       package com.frank.util; import java.io.IOException; import java.net.InetAd ...

  2. 杭电ACM2098--分拆素数和

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2098 这是源码.其实我本不想拿出源码,毕竟源码很容易被复制. 我这里刚开始出错的地方有 0_0_12811 ...

  3. iOS开发之窗口和视图

    视图就是应用程序的界面.视图可以使用nib文件实现,也可以使用代码创建.一个视图也是一个响应器(UIResponder的子类)这意味着一个视图可以与用户交互.因此,视图不只是用户可看到的界面,也是可以 ...

  4. 全面解析SQL SERVER 的左右内连接

    SQL SERVER数据库的三种常用连接解析: 这里先给出一个官方的解释: left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右 ...

  5. JavaScript 同源策略

    在JavaScript安全性限制Same-Origin Policy(同源策略)=>JavaScript只能访问与包含它的文档在同一域下的内容. 同源=>域名+协议+端口相同.

  6. iTerm2 颜色配置

    1. 首先找到配色文件: iterm2官网配色方案iTerm2-Color-Schemes altercation的  solarized配色方案solarized 2. 配置步骤: clone上面的 ...

  7. [大牛翻译系列]Hadoop(10)MapReduce 性能调优:诊断reduce性能瓶颈

    6.2.3 Reduce的性能问题 Reduce的性能问题有和map类似的方面,也有和map不同的方面.图6.13是reduce任务的具体的执行各阶段,标识了可能影响性能的区域. 这一章将介绍影响re ...

  8. [大牛翻译系列]Hadoop(2)MapReduce 连接:复制连接(Replication join)

    4.1.2 复制连接(Replication join) 复制连接是map端的连接.复制连接得名于它的具体实现:连接中最小的数据集将会被复制到所有的map主机节点.复制连接有一个假设前提:在被连接的数 ...

  9. linux 终端显示 -bash-4.1

    解决方法: cp /etc/skel/.bashrc /root/ cp /etc/skel/.bash_profile  /root/ 重新登陆就OK了

  10. php intval()函数

    格式:int intval(mixed $var [, int $base]); 1.intval()的返回值是整型,1或者0.可作用于数组或者对象(对象报错信息:Notice: Object of ...