Csharp/C#教程:NHibernate Definitive Cascade应用指南分享


NHibernate Definitive Cascade应用指南

是否有任何互联网资源可以明确指导NHibernate的所有级联设置,其中包括类结构,HBM的示例以及与NH的所有关系的每个级联设置的操作含义。

如果有以最正确的方式进行公共关联的示例,例如设置状态表,您将永远不会最终级联删除状态,或删除具有CreatedBy用户属性的对象,那么它将会很有用。永远不会以级联等方式删除用户

以下内容改编自NHiberate 3.0的Java Hibernate参考https://docs.jboss.org/hibernate/stable/core/manual/en-US/html/objectstate.html#objectstate-transitive (即当前的svn trunk) 。

对于NHibernate会话的每个基本操作 – 包括Persist(),Merge(),SaveOrUpdate(),Delete(),Lock(),Refresh(),Evict(),Replicate() – 都有相应的级联样式。 级联样式分别命名为persist,merge,save-update,delete,lock,refresh,evict,replicate。 Save()和Update()的级联样式是save-update; 对于SaveAndUpdateCopy(),它是合并; 对于PersistOnFlush(),它是持久的。 删除是删除的别名。

如果希望沿关联级联操作,则必须在映射文档中指明该操作。 例如:

 

级联风格我可以合并:

  

您可以使用cascade =“all”指定所有操作都应该沿关联级联。 默认级联=“none”指定不进行级联操作。

特殊的级联样式delete-orphan仅适用于一对多关联,并指示Delete()操作应该应用于从关联中删除的任何子对象。 all-delete-orphan与all,delete-orphan相同。

建议:

使用cascade =“all”映射关联(单值关联或集合)将关联标记为父/子样式关系,其中父项的保存/更新/删除导致保存/更新/删除子项或儿童。 除非在使用cascade =“delete-orphan”映射的关联的情况下,否则不会自动删除未被其父级引用的子级。 父/子关系的级联操作的精确语义如下:

这可能是明显的建议,但我建议浏览Ayende制作的旧post。 在他的网站上快速搜索 NHibernate和级联显示了一些有趣的post。 但是,它们可能对您的需求有点过于稀缺。

即使它本身不是互联网资源,我也会推荐NHibernate in Action 。 它在第3,4和6章中深入讨论了级联。本书以NHibernate 1.2为目标。 不过,我确实相信这本书的新版本将针对NHibernate的3.0版本; 可能值得关注。

尽管我希望看到级联的权威指南,但我还没有看到过。 也许你可以总结一些博客文章,在你自己的博客上用你自己的post讨论级联。

我不知道任何“权威”指南,但我所知道的最好的资源是来自Ayende的博客文章,他是NHibernate的权威大师之一:

NHibernate Cascades:all,all-delete-orphans和save-update之间的区别

对我来说,我实际上只使用cascade="none"cascade="all"all-delete-orphan有时是一个选项。 其他一切都是可疑的。 例如,为什么我应该隐式创建一个实例,因为它被引用,当它比包含对象长寿命? 对我来说,只有两种情况:对象是依赖对象还是独立对象。

上述就是C#学习教程:NHibernate Definitive Cascade应用指南分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/954185.html

(0)
上一篇 2021年11月20日
下一篇 2021年11月20日

精彩推荐