问题标签 [nhibernate-cascade]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 使用 NHibernate 实现可追溯性级联?
我已阅读inverse
和cascade
映射属性,并想知道:
- 是否可以在我的场景中使用它们?如果是的话,
- 如何相应地参数化它们?
假设我有两个类,Customer
并且Invoice
都需要可追溯性,TraceableEntity
.
我正在为我的所有实体使用存储库模式,因此存储库被注入NHibernate.ISession
到那里的构造函数中。事实上,我为每个实体都有一个存储库,Customer
并且Invoice
.
因为我需要用户登录,所以我认为这与业务模型无关,所以我将它设置在存储库的 Save 方法中,因为只有 ISession 知道用于连接底层数据库的用户,并且存储库依赖于它。这样,商业模式就不会被无用的信息污染。
另外,由于这种可追溯性的需要,我失去了inverse
和cascade
映射属性的功能和易用性,否则,我不知道如何将它们用于我的特定需求。
我们来看看
BaseRepository.Save()
方法。
TraceableEntity
Customer
Customer.hbm.xml
Invoice
Invoice.hbm.xml
话虽如此,我想知道是否有另一种可能更好的方法来做到这一点,因为实际上,我需要在CustomerRepository
, 中重写该BaseRepository.Save()
方法,只为了调用该InvoiceRepository.Save()
方法,如下所示:
另外,我想知道发票是否有可能“知道”谁是客户,而不必在保存时分配 Customer 属性,并让 NHibernate 魔术为我工作?
nhibernate - cascade="all" 还是 cascade="save-update"?NHibernate 一对多不会更新
遇到的问题
当我创建一个带有子集合的瞬态实例时,一切都会被持久化。
另外,如果我更新其中一个子对象的实例,则在我保存父对象时它不会更新。
我实际上正在使用cascade="all"
Problem reproduction
当我加载了所有客户事件并更改了发票时,就会出现问题,尽管我总是使用相同的ISession
.
逐步调试清楚地显示repository.Save()
正在执行的方法,并且更改不会显示在底层数据库中。
可以直接针对数据库表进行更新,因此没有任何约束会导致数据库端更新失败。
附上一些代码以防万一。
Customer.hbm.xml
Customer
Invoice.hbm.xml
Invoice
CustomerRepository
相关文章
任何帮助表示赞赏。
java - 休眠自我双向OneToMany级联删除不起作用
我有一个自我双向关系的问题,级联删除不起作用,我有以下实体,它的作用基本上是将一个具有多个级别的家谱放在一起,如果我尝试类似 em.remove (family) 它不会删除孩子们并捕获该异常“违反完整性约束 - 找到子记录”
桌子
ID
姓名
id_father
c# - 删除级联不适用于 NHibernate
我有一个表 Communication,它引用了 PersonCompany。在 PersonCompany 的映射中,我为此参考定义了 Cascade-Delete:
但是当我现在执行闲置的 HQL 查询时:
和
我总是得到这个 SqlException:
DELETE 语句与 REFERENCE 约束“FK_PersonCompany_Communication”冲突。冲突发生在数据库“proconact”、表“dbo.Communication”、列“PersonCompanyId”中。该语句已终止。
我认为,NHibernate 现在应该删除通信中引用的记录级联 - 不应该吗?
我希望有人可以帮助我,我做错了什么。
nhibernate-mapping - 删除记录上的休眠级联问题
我对级联一对多关系有疑问。我的一个表包含一个组件,该组件链接到另一个表,这是我的画廊(画廊与其他表有多种关系。)。然后该组件在我的一个基类中使用。我使用实体开发人员生成代码,并通过以下几行完成:Baseinfo.hbm.xml
……
由于我有时需要将其设置为 null,因此我将 not-null 更改为“false”。一切正常,直到我遇到删除记录。将 LocationMap 设置为 null 后,我检查了数据库,发现图像记录仍然存在。经过一些论坛后,我确实还在级联选项中添加了“delete-orphan”,man: cascade="all,delete-orphan" 但它没有用,我还将应用程序置于调试模式,并在执行保存代码后,我尝试了这在即时窗口上: session.Flush(); 那没有用...我不想经历丑陋的编码,并且记得删除以后代码的记录,因为它不起作用...,我该怎么办?!
c# - 部分类中属性的级联值
我有一个映射和 POCO,如下所示。问题是tbFNamesFeature
保存此对象时没有更新(而tblFeature
)我尝试了不同的值cascade
,但没有效果,所以我不得不说有些东西我没有得到。(见 ??? 在 xml 中)。
我究竟做错了什么?
tbFNamesFeature
有 2 列:
FNamesId (PK, int, not null)
FeatureId (PK, int, not null)
特征.cs
Feature.part.cs
nhibernate - Nhibernate高效级联删除
在使用 nHibernate 的删除上下文中,当删除带有子集合的父级时,我想知道为什么 Nhibernate 会为子级逐行删除(在子 PK 上)
为什么nhibernate不能做
例如,如果父母有 10 万个孩子,效率会更高。我搜索了许多主题而没有找到正确的答案。我也做了一些测试,但没有成功一个想法?