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

在插入之前强制NHibernate级联删除

在插入之前强制NHibernate级联删除是指在使用NHibernate作为ORM框架时,在执行插入操作之前,需要先执行级联删除操作。这是因为NHibernate的级联删除功能允许在删除一个实体时,自动删除与其相关的所有子实体。

在NHibernate中,可以通过在映射文件中设置cascade属性来实现级联删除。例如,如果有一个Order实体和一个OrderItem实体,并且想要在删除Order时自动删除与其相关的所有OrderItem,可以在映射文件中设置cascade属性为all或delete,如下所示:

代码语言:xml<class name="Order">
复制
  <id name="Id">
   <generator class="native"/>
  </id>
  <set name="OrderItems" cascade="all-delete-orphan">
    <key column="OrderId"/>
    <one-to-many class="OrderItem"/>
  </set>
</class>

在上面的例子中,cascade属性被设置为all-delete-orphan,表示在删除Order时,会自动删除所有相关的OrderItem实体,并且在删除Order时,如果OrderItem实体已经不存在,也会自动删除与其相关的所有OrderItem实体。

需要注意的是,在使用级联删除时,必须小心操作,以避免意外删除数据。例如,在上面的例子中,如果在删除Order时不小心删除了与其相关的所有OrderItem实体,就会导致数据丢失。因此,在使用级联删除时,必须非常小心,并且在删除操作之前进行充分的测试和验证。

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

相关·内容

Fluent NHibernate之旅(四)-- 关系(中)

Fluent NHibernate之旅系列导航: 一、开篇:ISessionFactory Configuration 二、实体映射:Entity Mapping 三、继承映射:Inheritence...映射 不得不赞叹一下 Fluent Nhibernate ,有了它,我们的映射一切都变得如此简单,先来看看Model吧,用户的订单列表,对于用户来说,暂时是不需要排序的,所以我们可以使用ISet作为Order...FirstOrDefault(); } Assert.NotNull(user); Assert.Equal(true, user.Orders.Any()); } 这里为什么没有using...我们Output中,能看到NHibernate生成的Sql语句,测试也成功,说明我们刚刚是立即加载了Orders属性。...总结 总体来说,一对多的映射比较简单点,不过我们今天只是说了一般的情况,但如果我们遇到级联更新、级联删除等,就会遇到一些问题,在后续文章中会慢慢道来。

702100

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

可以设置一个事务之间的进程级或集群级的二级缓存。 ISession - NHibernate.ISession: 一个单线程、短生命周期的对象,表示从应用程序和数据持久化之间一个连接。...实例状态 NHibernate中,一个可持久化的对象有三种不同的状态,依据与持久化上下文之间的关系不同,其中ISession就是一个持久化上下文。...show_sql 是否控制台中打印转换的SQL语句,一般调试的过程中会设置为true,用来确认生成的SQL是否正确等。...默认是空,表示不会强制更新数据库。有几个候选值:create或create-drop、update等。...其中create表示每次只创建新增的;create-drop表示每次ISessionFactory创建时创建表 ,ISessionFactory关闭时,删除表;其中update表示每次都会将DDL SQL

1.2K20

NHibernate 多对多映射的数据更新

NHibernate 多对多映射的数据更新 最近在用 NHibernate 做多对多更新时突然发现 NHibernate 更新的策略很差, 对多对多关系的更新居然是先全部删除插入全部数据, 感觉非常奇怪...], [RoleId]) VALUES (@p0, @p1);@p0 = 1 [Type: Int32 (0)], @p1 = 10 [Type: Int32 (0)] 居然是先将属于该用户的全部角色删除..., 再添加一份新的进来, 完全无法接受, 反过来思考觉得肯定是自己的问题, 经过一番搜索 (Google), 发现 StackOverflow 上也有人问类似的问题, 并且最终 NHibernate...NHibernate 参考文档的 19.5....sess.Flush(); 由此可见, bag 多对多映射更新时性能较差, 如果不需要更新,则可以放心使用, 需要更新时则 set 是更好的选择。

93410

NHibernate教程

一、NHibernate简介 今日的企业环境中,把面向对象的软件和关系数据库一起使用可能是相当麻烦、浪费时间的。NHibernate是一个面向.Net环境的对象/关系数据库映射工具。...配置NHibernate (1)NHibernate的配置文件有两种:桌面应用程序(WinForm)中为App.config,在网页应用程序(WebForm)中为web.config。...使用NHibernate的API进行编程 数据库编程不外乎“添加”、“删除”、“更新”,看看NHibernate是如何实现这三种操作吧。...(1) 类中声明NHibernate的Factory private static Configuration mCfg=new Configuration(); private static...NHibernate.ISessionFactory SessionFactory=null; (2) 系统初始化的时候加载XML,并创建Factory mCfg.AddXmlFile(

34310

Java开发手册之SQL语句

强制代码中写分页查询逻辑时,若count为0应直接返回,避免执行后面的分页语句。 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。...如果更新学生表中的student_id,同时触发成绩表中的student_id更新,即为级联更新。...外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。 【强制】禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。...【强制】数据订正时,删除和修改记录时,要先select,避免出现误删除,确认无误才能执行更新语句。...说明:TRUNCATE TABLE 功能上与不带 WHERE 子句的 DELETE 语句相同。

68720

SQL Server 触发器

SqlServer中的DML触发器有三种: insert触发器:向表中插入数据时被触发; update触发器:修改表中数据时被触发; delete触发器:从表中删除数据时被触发...当遇到下列情形时,应考虑使用DML触发器: 通过数据库中的相关表实现级联更改 防止恶意或者错误的insert、update和delete操作,并强制执行check约束定义的限制更为复杂的其他限制...登录触发器将在登录的身份验证阶段完成之后且用户会话实际建立之前激发。...[Person] AFTER UPDATE AS BEGIN SET NOCOUNT ON; --这里是先删除插入,存在一张临时表deleted Insert Into PersonLog...Age, AddDate, UpdateDate) Select ID, Name, Age, AddDate, UpdateDate From inserted END Delete 触发器: 向目标表中删除数据后

2.6K10

NHibernate 缓存

NHibernate 的参考文档中, 对 ISession 的描述如下: A single-threaded, short-lived object representing a conversation...一级缓存管理 一级缓存的管理也是很简单的, 可以通过下面的三个方法管理: session.Evict 从一级缓存中删除指定的实例; session.Clear 清空一级缓存, 不会保存修改的内容; session.Contains...也可以实体类的 hbm 映射文件中配置使用二级缓存, 不过 hibernate.cfg.xml 文件中统一配置是推荐的做法。...从二级缓存读/写数据 Refresh:向二级缓存写数据,想不从二级缓存读数据,通过配置文件设置 cache.use_minimal_puts从数据库中读取数据时,强制二级缓存刷新 CacheRegion...以上是项目中用到的二级缓存相关知识的整理, 肯定不完整, NHibernate 的缓存还有更多的地方需要挖掘。

58811

盘点 .NET 比较流行的开源的ORM框架

您可以使用 Chloe.ORM 通过 lambda 查询 LINQ 之类的数据并执行任何操作(查询 | 组查询 | 聚合查询 | 插入 | 批量更新 | 批量删除)。...开源地址:https://github.com/dotnet/ef6 六、NHibernate(国外) NHibernate 是一个成熟的开源对象关系映射器,适用于 .NET 框架。...开源地址:https://github.com/nhibernate/nhibernate-core 七、ServiceStack/ServiceStack.OrmLite(国外) 简单的 .NET 的快速...架构上,它比 Dapper、Massive 或 PetaPoco 等微 ORM 高出一步,因为您使用 LINQ 表达式而不是魔术字符串,同时代码和数据库之间维护一个薄抽象层。...插入/删除/更新/保存和 IsNew 的辅助方法 分页请求会自动计算出总记录数并获取特定页面。 简单的交易支持。 更好的参数替换支持,包括从对象属性中获取命名参数。

3.9K41

Java编码手册之华山版小精华

4) 插入的方法用 save/insert 做前缀。 5) 删除的方法用 remove/delete 做前缀。 6) 修改的方法用 update 做前缀。...【强制进行类型强制转换时,右括号与强制转换值之间不需要任何空格隔开。...【推荐】不同逻辑、不同语义、不同业务的代码之间插入一个空行分隔开来以提升可读性。 说明:任何情形,没有必要插入多个空行进行隔开。 11....正例:表达逻辑删除的字段名 is_deleted,1 表示删除,0 表示未删除。 20.【强制】主键索引名为 pk_字段名;唯一索引名为 uk_字段名;普通索引名则为 idx_字段名。...外键与级 联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风 险;外键影响数据库的插入速度。

60840

sqlserver事务锁死_sql触发器格式

触发器的主要作用主要有以下接个方面: 强制数据库间的引用完整性 级联修改数据库中所有相关的表,自动触发其它与之相关的操作 跟踪变化,撤销或回滚违法操作,防止非法修改数据 返回自定义的错误消息,约束无法返回信息...当遇到下列情形时,应考虑使用DML触发器: 通过数据库中的相关表实现级联更改 防止恶意或者错误的insert、update和delete操作,并强制执行check约束定义的限制更为复杂的其他 限制。...deleted表: 临时保存了删除或更新前的记录行; 可以从deleted表中检查被删除的数据是否满足业务需求; 如果不满足,则向用户报告错误消息,并回滚插入操作。...表上创建触发器trig_student,student表中插入删除、修改数据它会自动显示所有记录 -- create trigger必须是批处理的第一条语句,此处go不能缺少 create trigger...表上创建insert触发器,当向student插入数据时如果姓名发生重复时,则回流到插入之前的操作 create trigger trig_studentinsert on student after

1K10

.NETer们,你真的应该了解下EF Core3.x了!

NHibernate SqlSugar Dos.ORM Dapper PetaPoco EntityFramework EntityFrameworkCore 其中NHibernate是我使用过的第一个...成也萧何败也萧何,正是因为自动化了数据库操作,该过程是僵硬的,会导致复杂的数据库环境下无法保障性能。但这怪O/RM框架吗?...(为配合.Net5,EFCore下一个版本也叫EFCore5) (1)Sql索引支持 数据查询时,通过控制linq语句顺序,可以做到走索引,现在EFCoreCode Fitst时,ModelCreating...不过实际开发中,我更愿意封装一层ContextFactory来管控,还能做到复杂均衡。 ?...以上是EFCore中相对其他O/RM框架的一些新特性和优势,此外要在开发中应用好EFCore,还有蛮多需要学习的,比如数据初始化、Linq查询、复杂查询、延迟加载、惰性加载、级联删除、内置假删除,还有分布式环境下的数据一致性

1K10

使用VS2015和Nhibernate实现与MySql数据库连接,实现增删改查操作

,MySQL-FRONT ,Connector/Net(选择.Net&Mono) Nhibernate包可以VS2015中下载 ,对MySql操作,我用的是MySQL-FRONT,注意要想实现和数据库的链接...先写一个简单的给你定义的数据库中添加一条元素的代码:(不使用Nhibernate的) 前提:先把该用的dll文件,添加到引用里面去不然,会连接不成功,之前下载的Connector/Net(选择.Net&...if (mycmd.ExecuteNonQuery() > 0) { Console.WriteLine("数据插入成功...包来实现一个很简单的对数据增删改查的操作,这一次需要用到我们之前下载的Nhibernate包里面的文件,全部dll文件引入之后,“引用”下面应该是这样的: ?...然后我们工程下面新建两个文件夹:Model文件夹用来存放数据库表类和映射类,还有一个Manger类用来存放对数据库执行增删改查操作的类。

1.4K30
领券