使用Castle.ActiveRecord的注意事项之二:级联

  根据数库的设计,有密切联系的对象的增加,删除,修改设置级联操作,在使用中会有很大的便利但是也有些需要注意的地方。之前的项目使用,为了避免不必要的麻烦,一律设置成了不级联操作。后面对象的使用时,很多地方多写了多余重复的代码。其实,在使用前根据对象的属性,设计好级联操作,能带来很大的便利。本文从多对多,和一对多两个方面,并针对数据库设计中主外键的属性来分析对象的级联。

       由于学习Castle是从TerryLee的博文中开始,采用他老人家的习惯举例,以向他老人家致敬^_^
1、一对多
   假设一个博客有多个帖子,即一个Blog对应多个Post,权且称Blog为父对象,Post为子对象
     一对多的级联有几种方式  
Cascade=ManyRelationCascadeEnum.None  
Cascade=ManyRelationCascadeEnum.All
Cascade=ManyRelationCascadeEnum.AllDeleteOrphan
Cascade=ManyRelationCascadeEnum.SaveUpdate
Cascade=ManyRelationCascadeEnum.Delete
    意思都比较好理解:
NONE:完全不做级联操作
         在增加一个Blog,同时这个Blog含有Post的时候,需要先增加Post,然后增加Blog对象。否则报
    object references an unsaved transient instance - save the transient instance before flushing:  错误
    假设一个Blog对象BlogA含有PostB和PostC,现在修改BlogA,移除PostC,并增加PostD(数据库中已经存在),并把PostD的名字修改为PostE。执行BlogA.Update(),执行结果是数据库中PostC对应BlogA的外键设置为了空,PostD还是PostD,没有修改
        可见NONE的级联方式下,执行Update方法是只修改对象本身的内容和子对象的外键内容。子对象的其他字段不做修改。
ALL:增删改都做级联操作
ALLDELETEORPHAN:都做级联操作,并且删除孤儿数据。即删除没有对应BLOG的POST对象
SaveUpdate:在增加和更新的时候做级联操作
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值