问题标签 [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.

0 投票
2 回答
428 浏览

nhibernate - NHibernate 级联问题

我在一类中有这个映射:

而这在另一个:

在父级中,在当前事务中加载我添加到集合中:

然后我提交交易。对父级的任何更改都会通过更新调用保存到数据库中,但无论级联值或 inverse=true/false/just-save-already 如何,我都无法插入这些子级。我一直在抨击它,阅读示例/文档/等,但我不明白为什么它不起作用。我错过了一些简单的东西吗?我一直在关闭服务器并在每次更改后重新构建以确保事情正在更新,但是 nada。

更糟糕的是,有时它起作用,具有各种逆值,有时通过将 Request=parent 添加到孩子,有时通过在添加之前单独保存孩子......然后它稍后退出工作。我很困惑o_O

编辑:自从发布以来,事情已经明确地尝试过,在每个人之间重建+服务器重新启动,没有一个会产生插入调用或错误:

这确实有效:

但是,如果忽略它,那么设置级联又有什么意义呢?

编辑:在阅读了一些内容之后: http: //nhibernate.info/doc/nh/en/index.html#example-parentchild-bidir我试过了:

以上所有6个主要的,没有运气。

0 投票
1 回答
1429 浏览

c# - 防止与 NHibernate/FluentNHibernate 的多对多关系的级联更新,

我在 User 类和 Place 类之间有一个简单的多对多关系。这种关系由用户的“邻居”属性表示

UserPlace 类只是一个组件,它向 User 和 Place 之间的关系添加了一条信息:

关系映射如下:

创建用户时,会从数据库中加载多个 Places 并将其添加到用户中,其中一个设置为default。当用户被持久化时,关联的 UserPlace 实体也会被持久化。

我遇到的问题是与 UserPlace 关联的每个Place实体也会更新。这不是预期的效果,我尝试通过将 Cascade 设置为 None() 来防止 Cascade to Place 发生(双关​​语不是故意的)......但这并没有改变任何东西。

我只是通过指定不应更新 Place 上的每个属性 ([PropertyName].Not.Updated()) 来阻止此更新的发生。这有效,但不是解决方案。

有人对我如何防止这种情况发生有任何想法吗?

编辑: Place 实体映射也指定了 DynamicUpdate() - 所以当用户被保存时,实体真的不应该改变。

PS!我认为这对这种情况没有影响(但我可能错了!),但也要考虑一下:Place实体是在 NHibernate 之外加载的(使用 ADO.NET 和存储过程,因为我需要进行一些地理空间查询不能使用 NHibernate),然后通过在每个实体上调用 Session.Update() 附加到会话。

0 投票
1 回答
565 浏览

mysql - 流畅的休眠自动映射一对多使外键为空

我对 NHberinate 比较陌生,并且正在使用它作为 EF 的替代品,因为它在 Mono 上运行良好。

我所有的实体都使用 AutoMapping 进行映射。

问题是我有一个一对多的关系设置。Item 类之一具有localizedText 类。我还为 Cascade all 设置了一个约定。

当我将localizedText 添加到我的Item 类时,效果很好,并且localizedText 表将值写入表中,但是......外键值“itemId”保持为空。我怎样才能使它工作,以便localizedText项目在添加时有一个objectId?

扎克

0 投票
1 回答
1711 浏览

fluent-nhibernate - Fluent NHibernate 级联约定问题 - 已删除实例传递给更新

我通常使用约定将所有内容设置为级联,如下所示:

还使用 Fluent NHibernate 自动映射。它通常工作得很好,因为不必担心特定的保存命令等。但是,在以下情况下它被证明是一个问题:

所以,当我坚持一个新的查询时,我必须在服务方法中保存一个查询的实例,它设置了 CompletedQuestionnaire,而它又具有一系列 QuestionAnswer 实例。那里没有问题。

但是,我也想更新这些问题的答案。在这种情况下,Inquiry 和 CompletedQuestionnaire 需要保持不变。需要做的是删除所有问题答案并创建新答案(因为该列表的大小会增加或缩小)。

所以服务方法是:

我这样做是一个错误“传递给更新的已删除实例”。我只在 NHibernate 源代码中找到了这个异常的引用。如果我尝试在 IOneToManyCollectionInstance 上将级联更改为 All 或 UpdateAndSave,NHibernate 会尝试将 QuestionAnswer 记录 CompletedQuestionnaire 外键更新为 null,但由于不允许使用 null 而失败。如果删除语句按照代码顺序在此之前运行,这将不是问题,但奇怪的是这不会发生。

还尝试将级联设置为一对多到 DeleteOrphan,这会给出相同的已删除实例传递异常。

上面的服务方法实际上是反复试验的结果。对于“您做错了!”,我将不胜感激。

是否可以控制使用 NHiberante 执行的语句的顺序。说像 DeleteBeforeUpdate 或类似的约定?

编辑:我已将服务方法重新设计为:

并将相关的级联约定更改为:

现在我得到异常“已删除的对象将被级联重新保存(从关联中删除已删除的对象)”。如何正确地从关联中删除对象?

0 投票
1 回答
640 浏览

c# - nhibernate中的集合级联类型

我正在使用 NHibernate 3.2,并使用代码映射。

测试用例非常简单——我有一个商店和一个产品,由多对多集合链接。StoreMap中的多对多集合映射如下:

如果我是正确的,Cascade 选项应该允许您选择是否要将类上的操作级联到集合。NHibernate 3.2 允许这些选项,这对我来说并不简单:

我正在使用的示例是下面的示例,其中我正在创建一个测试商店和一个测试产品,并将其分配给商店。然后我正在重新加载商店,检索第一个产品,更新它并保存商店。

即使级联设置为“无”,产品仍会更新!发生这种情况正常吗?

0 投票
1 回答
5898 浏览

c# - 级联错误:删除的对象将被级联重新保存

我有一个 NHibernate 实现并使用延迟加载的项目。我在这个项目中有两个课程:Person 和 Family。这两者之间的关系是聚合,意味着一个人有一个人的列表。映射是:

在这个项目中,我通过 ID 获取一个人,然后删除一个家庭成员。

该家庭未删除,因为此消息引发异常: deleted object would be re-saved by cascade (remove deleted object from associations)[Domain.Entities.Family#167]

我怎样才能删除一个人的家庭?

0 投票
2 回答
4073 浏览

c# - 级联错误:具有相同标识符值的不同对象已与会话关联

我有一个 NHibernate 实现并使用延迟加载的项目。我在这个项目中有两个课程:Person 和 Family。这两者之间的关系是聚合,意味着一个人有一个家庭列表。映射是:

在这个项目中,我通过 ID 获取一个人,然后更新一个家庭成员。

系列未更新,因为此消息引发异常:`具有相同标识符值的不同对象已与会话相关联:193,实体:Domain.Entities.Family

我怎样才能更新一个人的家庭?

0 投票
1 回答
3175 浏览

nhibernate - 如何在nhibernate中删除具有级联的集合?

我有这个映射

现在我想删除一个国家。如果您删除一个国家/地区,则应删除所有卡片。它应该删除所有奖励。

当我这样做时。我收到以下错误。

为什么在发生删除时尝试进行更新?

0 投票
2 回答
2344 浏览

nhibernate - 如何在多对多关系中删除?

我有一个多对多的关系:

产品有很多类别,类别有很多产品。

说我有

现在我删除Shopping Category. 我希望Product A删除引用,Shopping Category并且希望Product B完全删除。

我最终会得到:

我如何在 nhibernate 中执行此操作(我正在使用流利的 nhibernate)。

我尝试使用 Cascade DeleteOrphanAllDeleteOrphan但是当我这样做并删除购物时,产品 A 和 B 都会被删除。

0 投票
1 回答
2084 浏览

c# - 没有让 NHibernate Cascade Delete Orphan 使用 Automapping

尝试了几种解决方案来让 NHibernate 删除孤立记录。给定以下结构:

更新: 它与二传手无关。这导致其他问题已修复。但是仍然没有删除孤儿我尝试了以下方法:

两者都导致使用 Parent_Id = null 存储域记录。

有没有关于如何结合 Automapping 实现这一目标的好例子?