Nhibernate 中多对多集合的更新导致连接表中的多个删除

2023-12-31

我有一个类,其中包含一个使用 Fluent Nhibernate 映射到多对多数据库关系的集合。映射如下 -

Table("Book");
Id(x => x.Id);
Map(x => x.Title);
Map(x => x.NumberOfPages);
HasManyToMany(x => x.Authors)
.Cascade.AllDeleteOrphan()
.Table("BookAuthor")
.ParentKeyColumn("BookId")
.ChildKeyColumn("AuthorId");

然后,我获取此类的一个实例,并使用下面的代码将一个项目添加到作者集合中 -

var book = session.CreateCriteria(typeof(Book)).UniqueResult<Book>();
Author author = new Author {Name="Phil Moran",Age=51};
book.Authors.Add(author);
session.SaveOrUpdate(book); 

数据库已成功更新,但 Nhibernate 会更新 BookAuthor 表,方法是首先删除其中链接到更新书籍的所有记录,然后重新填充所有数据以及新作者所需的额外记录。为什么 Nibernate 会这样做?我希望它只是将包含书籍和作者详细信息的单个记录添加到多对多表(BookAuthor)中,而不执行任何删除操作。我可以通过我的映射更改此行为吗?


当集合被映射为bag(我猜这是 FluentNH 中的默认设置)。

Use a set, list or idbag反而。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nhibernate 中多对多集合的更新导致连接表中的多个删除 的相关文章

  • NHibernate - 无法延迟初始化角色集合

    我有以下看似简单的场景 但我对 NHibernate 仍然很陌生 当尝试在我的控制器上加载以下模型以进行编辑操作时 控制器的编辑操作 public ActionResult Edit Guid id return View reposito
  • 使用带有两个列表而不是一个列表的地图。可以筑巢吗?

    我需要多次运行一个带有两个参数的函数 我有两个包含这些参数的列表 我希望能够使用map或类似的东西用相应的参数调用函数 我要调用的函数具有以下类型 runParseTest String gt String gt IO 列表的创建方式如下
  • 如何在基于其他数据帧的数据帧中创建联接?

    我有 2 个数据框 一份包含学生批次详细信息 另一份包含分数 我想加入 2 个数据框 数据框1包含 s1 s2 s3 Stud1 Stud2 Stud3 Stud2 Stud4 Stud1 Stud1 Stud3 Stud4 数据框2包含
  • 我应该检查代码中的数据库约束还是应该捕获数据库抛出的异常

    我有一个将数据保存到名为 作业 的表中的应用程序 Jobs 表有一个名为 Name 的列 该列具有 UNIQUE 约束 名称列不是主键 我想知道在尝试保存 更新新条目之前是否应该自己检查重复条目 或者最好等待数据访问层抛出异常 如果这个应用
  • NHibernate 按 id 逐出

    大家都知道session中有缓存 这个缓存一般可以通过2种方法来清除 会话 驱逐 会话 清除 第二种方法不仅删除单个条目的所有缓存 我有商业方法 它接收大对象的 id 来自 aspx 站点 或有时接收多个 id 并在数据库中进行原生sql操
  • 随机排列

    我无法找到一种随机洗牌元素的好方法std vector经过一些操作后 恢复原来的顺序 我知道这应该是一个相当简单的算法 但我想我太累了 由于我被迫使用自定义随机数生成器类 我想我不能使用std random shuffle 无论如何这没有帮
  • NHibernate Criteria API 是否支持集合属性的投影?

    我需要使用条件 API 复制以下工作 HQL 查询 session CreateQuery select c from Parent p inner join p Children c where p Id 9 and c Id 33 Se
  • 是一对一的关系不好的策略

    用户始终拥有一个钱包 一个钱包始终属于一位用户 由于我想分离与钱夹相关的属性 我创建了 Wallet 对象并能够跟踪钱交易 我创建了 public Wallet Entity
  • NHibernate Hi/Lo - id 中的间隙

    场景 Hi Lo 初始化为MyEntity与 Lo 100 桌子是空的 具有不同连接的两个会话都插入了三个项目 TableIds 1 2 3 100 101 102 如果稍后有第三个进来并插入三项 TableIds 200 201 202
  • 我可以在 NHibernate QueryOver 中使用 SQL 函数吗?

    我一直在互联网上搜索 但找不到有关如何使用 nhibernate 3 0 的 queryover 的示例 例如 我想在查询的 where 子句中使用字符串函数 前任 var item Query Where x gt x Name ToLo
  • 实体框架层次结构的代码优先映射

    我有一个看起来像这样的模型 public class Category public string Id get set public string Description get set public Category Parent ge
  • 如何使用 NHibernate 和 Fluent NHibernate 存储未截断的 varchar(max) 字符串

    我的数据库模式有一个 varchar max 字符串 我读过另一本问题 https stackoverflow com questions 2343105 override for fluent nhibernate for long te
  • MSTest 和 NHibernate

    有谁有让 MSTest 将 hibernate cfg xml 正确复制到输出目录的经验吗 我的所有 MSTest 都因找不到 hibernate cfg xml 错误而失败 我将其设置为 始终复制 但我的 MBUnit 测试通过了 您可以
  • NHibernate Session.Flush & Evict 与 Clear

    在一个测试中 我想要持久化一个对象 然后通过从数据库 而不是会话 获取它来证明它是持久化的 我注意到以下内容没有区别 save it session Clear fetch it or save it session Flush sessi
  • 有什么方法可以在地图上绘制多个条形图吗?

    我正在尝试在地图上绘制多个条形图 并且只是在寻找一个起点 我已经看过几个问题了 如下所示 地图上的条形图 https stackoverflow com questions 20465070 barplots on a map 使用ggpl
  • NHibernate 在生产中很少会抛出违反主键异常,无法用测试用例重现

    试图弄清楚这个问题 对我来说 这似乎不可能 我的服务器报告在繁忙的服务器上每天发生一次或两次以下错误 PlaylistItem create System Data SqlClient SqlException Violation of P
  • NHibernate 对单个属性的更新会更新 sql 中的所有属性

    我正在 NHibernate 中对单个属性执行标准更新 然而 在提交事务时 sql 更新似乎设置了我映射到表上的所有字段 即使它们没有更改 这肯定不是 Nhibernate 中的正常行为吧 难道我做错了什么 谢谢 using var ses
  • 如何在 Nhibernate 中进行版本控制?

    我不敢相信让别人向我展示一个简单的工作示例是如此困难 这让我相信每个人都只能说得好像他们知道如何去做 但实际上他们并不知道 我将帖子缩短为仅我想要示例执行的操作 也许帖子太长了 吓跑了人们 为了获得这个赏金 我正在寻找一个可以在 VS 20
  • NHibernate:QueryOver<> 帮助

    我刚刚开始使用 NHibernate 在运行更复杂的查询时遇到了麻烦 我有带有附加标签列表的实体 用户将提供两个标签列表 包括和排除 我需要找到具有所有包含标签的所有实体 并排除在排除列表中具有任何标签的任何实体 下面是我的第一个努力 这显
  • 根据查询参数将相同的URL映射到Spring中的不同控制器

    我正在使用基于 spring 注解的控制器 我希望我的 URL user messages 映射到某个控制器 a 如果存在查询参数标记 否则映射到某个不同的控制器 b 这是必需的 因为当存在参数标签时 可以存在更多参数以及我想要在不同控制器

随机推荐

  • 我应该使用shared_ptr还是unique_ptr

    我一直在使用 pimpl 习惯用法制作一些对象 但我不确定是否使用std shared ptr http en cppreference com w cpp memory shared ptr or std unique ptr http
  • Activity 中的多个 ViewPager

    我试图在一项活动中实现多个 ViewPager 但它并没有真正起作用 实现这一点的最佳方法是什么 我被困住了 这是活动 import android app Activity import android os Bundle import
  • 如何使用 Google TTS java 客户端修复“无法找到策略‘pick_first’”?

    我无法使用 Java 中的 Google TTS 客户端库发出请求 每次它都会抛出一堆异常 我只是尝试获取可用声音的列表 GoogleCredentials creds null TextToSpeechClient textToSpeec
  • 多个 THEN 到单个 CASE 语句?

    我想添加一个额外的列 这个额外的列将根据 case 语句获得一个值 例如 我的目标是 尽管语法非常错误 但要完成此任务 当 A 然后 Apple AND ExtraColumn 1 我尝试使用下面的代码创建与此等效的代码 但收到错误消息 指
  • 检查是否安装了 SQL CE 的最佳方法,如果安装了,是什么版本?

    我编写了一个使用 SQL CE 3 5 的 VB NET 应用程序 我很好奇是否有人有任何最佳实践或代码来帮助检查 A SQL CE 是否已安装以及 B 如果安装了 是什么版本 我搜索了 msdn 和 google 来查找任何内容 但没有发
  • 我想从 XML 文件加载数据并显示在列表框中?

    我有三门课 首先是人 public class Person public string FirstName get set public string LastName get set public string Email get se
  • 如何在张量流中显式广播张量以匹配另一个张量的形状?

    我有三个张量 A B and C在张量流中 A and B都是形状 m n r C是形状的二元张量 m n 1 我想根据以下值从 A 或 B 中选择元素C 显而易见的工具是tf select 但是它没有广播语义 所以我需要首先显式广播C与
  • SQL JOIN 中的重复记录

    我在 SQL 查询中得到多个结果 我有三个表 付款 信用和费用 在每个月末 我需要根据帐户持有人 我们称之为所有者 进行余额转发 我尝试了不同的查询 但不断收到重复的行 我知道这与我的WHERE条款 但我不知道如何解决它 在我的测试数据中
  • CUDA 链接错误 - Visual Express 2008 - 由于(空)配置文件导致 nvcc 致命

    在过去的两周里 我一直在广泛寻找可能的解决方案来解决我的错误 我已经成功安装了Cuda 64位编译器 工具 和SDK以及64位版本的Visual Studio Express 2008和带有Framework 3 5的Windows 7 S
  • 寻找机器人在房子里定位的方法

    我正在破解一个吸尘器机器人用微控制器 Arduino 控制它 我想要做到打扫房间时更有效率 目前 它只是直行并在碰到物体时转向 但我很难找到最佳算法或方法用于知道它在房间中的位置 我正在寻找一种既便宜 不到 100 美元 又不太复杂 不需要
  • 如何在 Fortran 中即时增加数组大小?

    我的程序通过 3D 数组运行 标记它找到的 簇 然后进行一些检查以查看是否有任何相邻簇的标签高于当前簇 还有第二个数组保存 正确的 簇标签 如果它发现第 n 个相邻簇被正确标记 则将该元素分配给 0 否则将其分配给正确的标签 例如 如果第
  • 如何在 Retrofit 请求正文中 POST 原始整个 JSON?

    这个问题之前可能已经被问过 但没有得到明确的答案 到底如何在 Retrofit 请求的正文中发布原始的整个 JSON 查看类似问题here https stackoverflow com questions 19099536 post bo
  • 使用 SSH 远程运行 Shell 脚本块

    我尝试使用 shell 脚本在不同的服务器上执行命令块 谁能帮我解决这个问题吗 while RecordCount gt 0 do expXXXXX sed n RecordCount p GUID DLT EXPR FILE cut d
  • 如何在 PHP 中检查我是否处于静态上下文中?

    有什么方法可以检查方法是静态调用还是在实例化对象上调用 请尝试以下操作 class Foo function bar static isset this this instanceof self
  • 为什么127*2换成byte结果是-2?

    这是我的代码 public class test public static void main String args byte a byte 127 b 2 byte c byte a b System out println c 为什
  • 如何让div出现在另一个div的前面?

    请参考下面的代码 ul li style height 100px div style height 500px background color black div li ul 从上面的代码我们知道我们只能看到100px高度的黑色背景 我
  • 如何使用 URL 传递 PHP 变量

    我想使用 URL 传递一些 PHP 变量 我尝试了以下代码 链接 php pass php pre code code pre
  • 神经网络发散而不是收敛

    我已经实现了一个 2 层的神经网络 使用 CUDA 每层 2 个神经元 我试图让它使用反向传播学习 2 个简单的二次多项式函数 但它没有收敛 而是发散 输出变得无穷大 以下是有关我尝试过的更多详细信息 我已将初始权重设置为 0 但由于它是发
  • 嵌套Python列表推导式来构造列表列表

    我是一个Python新手 在摸索嵌套列表理解时遇到了麻烦 我正在尝试编写一些代码来读取文件并为每行的每个字符构建一个列表 所以如果文件包含 xxxcd cdcdjkhjasld asdasdxasda 结果列表将是 x x x c d c
  • Nhibernate 中多对多集合的更新导致连接表中的多个删除

    我有一个类 其中包含一个使用 Fluent Nhibernate 映射到多对多数据库关系的集合 映射如下 Table Book Id x gt x Id Map x gt x Title Map x gt x NumberOfPages H