首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

删除父项时如何使NHibernate删除子引用?

在使用 NHibernate 进行数据库操作时,当删除一个父项时,如果希望 NHibernate 自动删除其子引用,可以通过以下方法实现:

  1. 在映射文件中设置级联操作。

在映射文件中,可以为子引用设置级联操作,例如设置为 all-delete-orphan,这样当删除父项时,NHibernate 会自动删除其子引用。

例如,假设有一个 Parent 类和一个 Child 类,其中 Parent 类有一个 Children 集合属性,可以在映射文件中这样设置:

代码语言:xml<class name="Parent">
复制
  <id name="Id">
   <generator class="identity"/>
  </id>
  <set name="Children" cascade="all-delete-orphan">
    <key column="ParentId"/>
    <one-to-many class="Child"/>
  </set>
</class>

这样,当删除一个 Parent 对象时,NHibernate 会自动删除其 Children 集合中的所有 Child 对象。

  1. 使用 session.Delete() 方法删除父项。

当使用 session.Delete() 方法删除一个父项时,NHibernate 会自动删除其子引用。例如:

代码语言:csharp
复制
using (var session = sessionFactory.OpenSession())
{
    using (var transaction = session.BeginTransaction())
    {
        var parent = session.Get<Parent>(parentId);
        session.Delete(parent);
        transaction.Commit();
    }
}

这样,当删除 parent 对象时,NHibernate 会自动删除其 Children 集合中的所有 Child 对象。

总之,要使 NHibernate 在删除父项时自动删除子引用,可以通过在映射文件中设置级联操作和使用 session.Delete() 方法来实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C# 数据操作系列 - 11 NHibernate 配置和结构介绍

持久化上下文中持有一个指向该对象的引用。这种状态通常是从数据库中获取到数据或者新建的数据附加到了上下文中。...配置介绍 在上一篇文章中,我们介绍了一下如何设置NHibernate的基本配置,但是并未对配置进行深入。...这一节,将带领大家看一下NHibernate中我们常用的配置,因为配置有很多,但一大部分通常情况都遇不到使用它的时候。...其中create表示每次只创建新增的;create-drop表示每次ISessionFactory创建创建表 ,ISessionFactory关闭删除表;其中update表示每次都会将DDL SQL...总结 这是一篇枯燥乏味的说明文,主要介绍了Nhibernate的基本内容。下一章我们来试试,如何创建Nhibernate的映射配置。

1.2K20

C#——Nhibernate探索

这里有两个类库;可以分析得出,这两个类库是要被引用的。 类库拥有对应的XML,没找到具体使用该XML的方法。所以暂时不去理他。 NHibernate.pdb应该是没有用的。估计是作者忘记删除了。...虽然感觉,这俩文件好像不是这么用的,但由于可以判断它们并不影响程序运行,所以,先且不管他们,等程序运行起来后,再删除他们试试。 再之后,我上网调查了下Nhibernate的应用。...上网调查后,发现Nhibernate有Castle框架、LinFu框架、Spring.Net三种。 看起来很复杂,文章有很多,写的又很复杂,于是我放弃调查,直接尝试使用,首先第一步,直接引用类库。...一、建立了一个类库程序,引用Iesi.Collections.dll和NHibernate.dll两个DLL。  接下来,我们开始建立持久化对象。...结语 这是一场Nhibernate探索之旅,结果是非常顺利的配置成功了。共耗时2小

49430
  • Java数据结构和算法(十)——二叉树

    然后我们介绍了另外一种数据结构——链表,链表的插入和删除很快,我们只需要改变一些引用值就行了,但是查找数据却很慢了,因为不管我们查找什么数据,都需要从链表的第一个数据开始,遍历到找到所需数据为止,这个查找也是平均需要比较...二叉搜索树作为一种数据结构,那么它是如何工作的呢?它查找一个节点,插入一个新节点,以及删除一个节点,遍历树等工作效率如何,下面我们来一一介绍。...①、删除没有节点的节点   要删除叶节点,只需要改变该节点的节点引用该节点的值,即将其引用改为 null 即可。...②、删除有一个节点的节点   删除有一个节点的节点,我们只需要将其父节点原本指向该节点的引用,改为指向该节点的节点即可。 ?...同样,从 1000000 个数据的数组中删除一个数据平均需要移动 500000 个数据,而在 1000000 个节点的二叉树中删除节点只需要20次或更少的次数来找到他,然后在花一点间来找到它的后继节点

    1.5K60

    AS3 内存回收机制

    对象内部的对象被外部其他对象引用了,会导致此对象不会被删除对象不会被删除又会导致了对象不会被删除;          3....如果一个对象中引用了外部对象,当自己被删除或者不需要使用此引用对象,一定要记得把此对象的引用设置为null;          4....对象立刻被删除了不代表对象就会被删除或立刻被删除,可能会在后期被系统自动删除或第二次移除操作删除;         7....如果对象remove了对象后没有清除对子对象的引用对象一样是不能被删除的,对象也不能被删除;         8....对象被删除了不代表其余对象都删除了,找到一种状态的泄露代码不等于其他状态就没有泄露了,要各模块各状态逐个进行测试分析,直到测试任何状态下都能删除整个对象为止。

    75010

    我的CMS开发记-3 只要是人就会犯错误,只要是软件就会有BUG,即使他是nhibernate

    nhibernate1.2支持access数据库。但是我一直在用sqlserver开发。现在已经有了一点样,于是我心血来潮,将数据库切换为Access,看看执行的效果如何。      ...nhibernate??不会吧?不过事已至此,又不可能重新写,只好硬着头皮上了,呵呵。...将nhibernate引用移除,直接引用nhibernate的源码开始调试,没想到啊没想到,居然还真的被我给找出bug来了。     ...nhibernate处理access,使用的是jetdriver这个方言。由于access的特殊性(sql语句做连接,必须要用括号),于是在jetdriver里,对sql语句进行了处理。...原来bug就在这里, 他在查找关键字,是按照"from","where"这两个,但是,from,where这两个词必须要在头尾加上空格才能保证不会和其他单词混淆。原文是没有空格的。

    58180

    NET中小型企业项目开发框架系列(一个)

    同一候有Spring.NET来管理层之间的关系。达到解耦的目的。...一个抽象类实现增删改查的同一候又添加了子类的自身扩展性....接下来,就是Dao部分,我们须要非常谨慎的去设计, 首先我们要设计一个用Nhibernate实现的公共类的CommonSupportDAL类,用它来实现增删改查, <span style="font-family...通过这个继承体系保证了我们在实现增删改查的同一<em>时</em>候外放一个接口保证扩展性....继承系列图: 总结 这样我们的数据訪问层,非常轻松的实现了,基本上代码量非常少,增删改查部分差点儿”0″代码,都是泛型的<em>父</em>类实现了.抽象、继承、泛型、托付、容器等等大大提高了代码的复用性

    58010

    数据结构之二叉树解析

    垃圾回收器会自动回收叶节点,不需要自己手动删掉;当节点有一个节点,这个节点只有两个连接:连向节点和连向它唯一的节点。...需要从这个序列中剪断这个节点,把它的节点直接连到它的节点上即可,这个过程要求改变节点适当的引用(左节点还是右节点),指向要删除节点的节点即可;第三种情况最复杂,如果要删除有两个子节点的节点,...下图显示的就是要删除节点用它的后继代替它的情况,删除后还是有序的。(这里还有更麻烦的情况,即它的后继自己也有右节点,下面再讨论。) ?   那么如何找后继节点呢?...字段置为要删除节点的右节点; 把待删除节点从它节点的leftChild或rightChild字段删除,把这个字段置为后继; 把待删除的左节点移除,将后继的leftChild字段置为待删除节点的左节点...如果后继节点就是待删除节点的右节点,这种情况就简单了,因为只需要把后继为跟的子树移到删除的节点的位置即可。如下图所示: ?   看到这里,就会发现删除相当棘手的操作。

    40330

    .Net 高效开发之不可错过的实用工具 工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件,内

    PostSharp: 去除重复编码和避免由于交叉引用产生的代码冗余。...Internals Viewer for SQL Server: Internals Viewer 用来在SQL Server 的存储引擎中的查找工具,以及获取数据在物理层是如何分配,组织和存储的。...NHibernate NHibernate Mapping Generator : 生成 NHibernate 映射文件,并从存在的数据库表映射到领域类。 ​...TreeTrim: TreeTrim 是调整代码的工具,能够删除一些无效的debug文件和临时文件等。 BrowserStack: 支持跨浏览器测试的工具。...BugShooting: 屏幕截图软件,能够铺货和附加工作,bug,问题跟踪等。 Postman: REST 客户端,能够发送http请求,分析REST 应用程序发出的响应。

    3.4K60

    本文帮你在Unix玩转C语言

    (gdb)set follow-fork-mode child使gdb进入进程,事实证明不设置(默认调试进程)这句无法进入pid==0的语句块。...link(existpath, newpath)创建一个新的目录,增加链接数;unlink(pathname)删除目录,将pathname所引用的文件链接数减1....目录删除后看不见文件,但文件仍有可能占据磁盘空间直至被内核删除。 ./a.out & 表示后台运行 如果打开文件的进程数和链接数同时为0,内核会删除该文件。...写复制(copy-on-write)写复制,只读共用。 vfork在进程调用exec或exit之前,他在进程的空间中运行,调用exec或exit之后父进程才继续运行。...void abort(void)使异常程序终止。进程终止会向进程发送SIGCHLD信号。sig2str str2sig是信号编号和信号名相互转换函数。

    84210

    Oracle 12.2 的连接消除特性

    编辑手记:在12.1及以前的版本中,当祖父,,子表之间有明显的主键和引用完整性约束,只有加入的主键是单个列键,才能进行连接消除; 但在12.2多列主键也允许发生连接消除,优化器从内联视图中删除对象...正如你接下来将看到的三个表,祖父,有明显的主键和引用完整性约束。 这意味着祖父具有单列主键,具有双列主键,子项具有三列主键。...注意: 如果想知道从Oracle语法切换到ANSI语法是否会有所不同,说明如下:使用ANSI语法,如果SQL按照 grandparent - > parent - > child的顺序列出表,祖父都会被删除...然后优化器优化内联查询,消除祖父级在级和级之间留下联接,最后才允许级被删除。 但我们得到的结果如下: ?...在这种形式下,优化器从内联视图中删除对象,并在对象和祖父对象之间留下连接 - 因此无需进一步消除。

    1.5K60

    Yarn管理放置规则

    放置规则可以定义在指定应将哪个队列用于提交的作业考虑的逻辑。这些预定义规则使您可以在提交作业无需指定队列名称即可提交作业。...放置规则策略 创建放置规则,您必须设置其策略。您可以选择许多预定义的策略,也可以创建自定义策略。 重要 在引用队列,Cloudera 建议始终提供队列。...虽然,在容量调度程序中,您只能通过叶队列名称来引用队列,但如果有更多具有相同名称的叶队列,则可能会导致问题。提供队列可确保将引用转换为完全限定的路径,即不会有歧义。...使用队列管理器 UI,可以通过以下方式实现此逻辑: 队列层次结构 名称旁边带有螺栓标志的队列是启用了动态自动创建的。...仅当您至少有两个放置规则,重新排序选项才可用。 单击规则行中的上移和下移箭头按钮。 单击保存重新排序。 删除放置规则 YARN 队列管理器 UI 使您能够删除以前创建的放置规则。

    2.1K10

    使用 React 与 Vue 创建同一款 App,差别究竟有多大?

    我们绑定了 this 并传递 key 参数,当用户点击删除,函数通过 key 区分用户点击的是哪一条 ToDoItem 。...然后可以在组件中通过名字引用它们。 如何将数据发送回组件 React 的实现方法 我们首先将函数传递给组件,方法是在我们调用组件将其引用为 prop。...然后我们通过引用 this.props.whateverTheFunctionIsCalled,为组件添加调用函数,例如 onClick。然后,这将触发组件中的函数。...删除待办事项一节中详细介绍了整个过程。 Vue 的实现方法 在组件中我们只需编写一个函数,将一个值发送回函数。在组件中编写一个函数来监听子组件何时发出该值的事件,监听到事件之后触发函数调用。...同样,删除待办事项一节中详细介绍了整个过程。 总结 我们研究了添加、删除和更改数据,以 prop 形式从父组件到组件传递数据,以及通过事件监听器的形式将数据从子组件发送到组件。

    5.3K10

    2020最新前端面试题_2020年前端面试题

    它的机制就是跟踪某一个值得引用次数,当声明一个变量并且将一个引用类型 赋值给变量得时候引用次数加1,当这个变量指向其他一个引用次数减1, 当为0出发回收机制进行回收。...只是改变display属性,dom元素并未消失,切换不需要重新渲染页面 v-if直接将dom元素从页面删除,再次切换需要重新渲染页面 5、如何让CSS只在当前组件中起作用 scoped 6、 mounted -> mounted 组件更新过程 beforeUpdate -> beforeUpdate -> updated -> updated 组件更新过程...xx 的值 组件通过 this....组件把方法传入组件中,在组件里直接调用这个方法。 46、 如何让 CSS 只在当前组件中起作用? 在组件中的 style 前面加上 scoped 47、如何获取 dom?

    6.7K10

    3分钟速读原著《Java数据结构与算法》(三)

    O(logN) 1.6 节点表示的是保存在树当中的数据对象 1.7 程序当中通常用节点到节点的引用来表示边 1.8 遍历树是按照某种顺序访问树种所有的节点 1.9 最简单的遍历方法是前序,中序和后序...1.10 非平衡树是指根左边的后代比右边的多,或者相反 1.11 查找节点需要比较要找的关键字值和节点的关键字值,如果要找的节点关键值小,就转向那个节点的左节点,如果大就转向右节点 1.12 插入需要找到要插入的新节点的位置改变它的节点的字段来指向它...1.13 中序遍历按照关键字升序访问节点 1.14 前序和后序遍历对解析代数表达式是有用的 1.15 如果一个节点没有节点,删除它只要把它的节点的字段设置为nul,xml本身也类似于解析这样的一个...document的树 1.16 如果一个节点有一个节点,把它节点的字段设置为它的节点就可以删除它 1.17 如果一个节点有两个子节点,删除它需要用它的后继来替代它 1.18 A节点的后继是以A的右节点为根的子树中关键值最小的那个节点...3.8 左旋把顶端节点移动到它的左节点的位置,并且把顶端节点的右节点移动到顶端节点的位置 3.9 当顺着树乡下查找新节点的插入位置,应用颜色变换,并且有时应用旋转,颜色变换通过简单的方法,使得树在插入后恢复称为正确的红黑树

    45910

    mysql常见的建表选项和约束

    一张表中可以定义多个外键 外键列默认可以给null值 父子表 外键所在的表叫做子表,从表 外键所引用的主键所在的表叫做表,主表 constraint emp_deptid_fk foreign_key...(deptid) references dept(deptid) 外键的删除规则 当删除表中的行时,如果子表中有依赖被删除行的行存在,那么就不允许删除,并抛出异常(默认对外键使用on delete...restrict或on delete no action选项) 在定义外键约束,可以通过使用on delete cascade或on delete set null来改变外加的默认删除规则 on delete...cascade:级联删除,当删除表中的行时,如果子表中有依赖于被删除行的行存在,那么联通行一起删除,相当于rm -f on delete set null:当删除表中的行时,如果子表中有依赖于被删除行的行存在...,那么不删除,而是将行的外键设置为null 外键引用定义 reference_definition: REFERENCES tbl_name (index_col_name,...)

    14610

    SQL表之间的关系

    可以使用ALTER TABLE命令删除外键。用作外键引用的RowID字段必须是公共的。引用隐藏的RowID?有关如何使用公用(或专用)RowID字段定义表的信息。一个表(类)的外键最大数目为400。...外键引用完整性检查外键约束可以指定更新或删除引用操作。 在CREATE TABLE reference action子句中描述了使用DDL定义这个引用操作。...例如,如果删除操作因违反外键引用完整性而不能执行,则不会执行BEFORE DELETE触发器。在/关系中,没有定义子元素的顺序。 应用程序代码不能依赖于任何特定的顺序。...表和子表定义父表和子表在定义投射到表的持久类,可以使用relationship属性指定两个表之间的/关系。...ID的记录,会使用%msg子表'Sample生成SQLCODE -104错误。

    2.5K10
    领券