使用Castle.ActiveRecord的注意事项之二:级联
2008-10-29 14:18
639 查看
根据数库的设计,有密切联系的对象的增加,删除,修改设置级联操作,在使用中会有很大的便利但是也有些需要注意的地方。之前的项目使用,为了避免不必要的麻烦,一律设置成了不级联操作。后面对象的使用时,很多地方多写了多余重复的代码。其实,在使用前根据对象的属性,设计好级联操作,能带来很大的便利。本文从多对多,和一对多两个方面,并针对数据库设计中主外键的属性来分析对象的级联。
[align=left] 由于学习Castle是从TerryLee的博文中开始,采用他老人家的习惯举例,以向他老人家致敬^_^[/align]
[align=left][/align]
[align=left]1、一对多[/align]
[align=left] 假设一个博客有多个帖子,即一个Blog对应多个Post,权且称Blog为父对象,Post为子对象[/align]
[align=left] 一对多的级联有几种方式 [/align]
[align=left]Cascade=ManyRelationCascadeEnum.None [/align]
[align=left]Cascade=ManyRelationCascadeEnum.All[/align]
[align=left]Cascade=ManyRelationCascadeEnum.AllDeleteOrphan[/align]
[align=left]Cascade=ManyRelationCascadeEnum.SaveUpdate[/align]
[align=left]Cascade=ManyRelationCascadeEnum.Delete[/align]
[align=left] 意思都比较好理解:[/align]
[align=left]NONE:完全不做级联操作[/align]
[align=left] 在增加一个Blog,同时这个Blog含有Post的时候,需要先增加Post,然后增加Blog对象。否则报[/align]
[align=left] object references an unsaved transient instance - save the transient instance before flushing: 错误[/align]
[align=left] 假设一个Blog对象BlogA含有PostB和PostC,现在修改BlogA,移除PostC,并增加PostD(数据库中已经存在),并把PostD的名字修改为PostE。执行BlogA.Update(),执行结果是数据库中PostC对应BlogA的外键设置为了空,PostD还是PostD,没有修改[/align]
[align=left] 可见NONE的级联方式下,执行Update方法是只修改对象本身的内容和子对象的外键内容。子对象的其他字段不做修改。[/align]
[align=left]ALL:增删改都做级联操作[/align]
[align=left]ALLDELETEORPHAN:都做级联操作,并且删除孤儿数据。即删除没有对应BLOG的POST对象[/align]
[align=left]SaveUpdate:在增加和更新的时候做级联操作[/align]
[align=left] [/align]
[align=left]本文原于2008年03月21日 23:57:00发表在http://blog.csdn.net/appgqp/[/align]
[align=left] 由于学习Castle是从TerryLee的博文中开始,采用他老人家的习惯举例,以向他老人家致敬^_^[/align]
[align=left][/align]
[align=left]1、一对多[/align]
[align=left] 假设一个博客有多个帖子,即一个Blog对应多个Post,权且称Blog为父对象,Post为子对象[/align]
[align=left] 一对多的级联有几种方式 [/align]
[align=left]Cascade=ManyRelationCascadeEnum.None [/align]
[align=left]Cascade=ManyRelationCascadeEnum.All[/align]
[align=left]Cascade=ManyRelationCascadeEnum.AllDeleteOrphan[/align]
[align=left]Cascade=ManyRelationCascadeEnum.SaveUpdate[/align]
[align=left]Cascade=ManyRelationCascadeEnum.Delete[/align]
[align=left] 意思都比较好理解:[/align]
[align=left]NONE:完全不做级联操作[/align]
[align=left] 在增加一个Blog,同时这个Blog含有Post的时候,需要先增加Post,然后增加Blog对象。否则报[/align]
[align=left] object references an unsaved transient instance - save the transient instance before flushing: 错误[/align]
[align=left] 假设一个Blog对象BlogA含有PostB和PostC,现在修改BlogA,移除PostC,并增加PostD(数据库中已经存在),并把PostD的名字修改为PostE。执行BlogA.Update(),执行结果是数据库中PostC对应BlogA的外键设置为了空,PostD还是PostD,没有修改[/align]
[align=left] 可见NONE的级联方式下,执行Update方法是只修改对象本身的内容和子对象的外键内容。子对象的其他字段不做修改。[/align]
[align=left]ALL:增删改都做级联操作[/align]
[align=left]ALLDELETEORPHAN:都做级联操作,并且删除孤儿数据。即删除没有对应BLOG的POST对象[/align]
[align=left]SaveUpdate:在增加和更新的时候做级联操作[/align]
[align=left] [/align]
[align=left]本文原于2008年03月21日 23:57:00发表在http://blog.csdn.net/appgqp/[/align]
相关文章推荐
- 使用Castle.ActiveRecord的注意事项之二:级联
- 使用Castle.ActiveRecord的注意事项之二:级联
- 使用Castle.ActiveRecord的注意事项之四:using (new SessionScope(FlushAction.Never))
- 使用Castle.ActiveRecord的注意事项之一:总览
- 使用Castle.ActiveRecord的注意事项之四:using (new SessionScope(FlushAction.Never))
- 使用Castle.ActiveRecord的注意事项之一:总览
- 使用Castle.ActiveRecord的注意事项之一:总览
- 使用CASTLE.ActiveRecord的注意事项之一:总览
- 使用Castle.ActiveRecord的注意事项三:继承
- 使用Castle.ActiveRecord的注意事项之四:using (new SessionScope(FlushAction.Never))
- 使用Castle.ActiveRecord的注意事项四:using (new SessionScope(FlushAction.Never))
- 使用Castle.ActiveRecord的注意事项之三:继承
- 使用Castle.ActiveRecord的注意事项之三:继承
- 使用Castle.ActiveRecord的注意事项之三:继承
- 使用CASTLE的注意事项之二:级联
- C#.Net Castle ActiveRecord学习实践(7):使用HQL查询
- Castle ActiveRecord学习实践(6):延迟加载和使用Where子句
- ObjectQuery for Castle.ActiveRecord 使用指南(1):From语句
- Castle.ActiveRecord 使用 存储过程 返回实体类
- Castle ActiveRecord 二级缓存使用 异常记录