PetaPoco 在带有触发器的表上插入失败

2024-01-06

我们使用 PetaPoco 作为 SQL 2008 数据库的数据访问工具。当尝试在附加了触发器的表上插入/更新行时,我们遇到了问题。

我们正在使用 PetaPoco 的 db.Save(object);

显示的错误是: 如果 DML 语句包含 OUTPUT 子句而不包含 INTO 子句,则该语句的目标表“the_table_with_a_trigger”不能具有任何启用的触发器。

我们如何使用 PetaPoco 在具有触发器的表上插入/更新数据?


感谢@Eduardo Molteni,你让我走上了解决这个问题的正确道路。显然,SQL Server 2008 R2 中的一个已知问题是,如果表具有触发器,则插入中的 OUTPUT 命令将失败。但是,PetaPoco 会自动将 OUTPUT 子句插入到表具有 AutoIncrement=true 的任何插入的命令文本中。

我的解决方案(对于 SQL Server 2008 R2)如下:

1)进入PetaPoco.DatabaseTypes.SqlServerDatabaseType.GetInsertOutputClause函数

删除(注释掉)\\return String.Format(" OUTPUT INSERTED.[{0}]", primaryKeyName);

这将从 SQL 插入语句中删除“OUTPUT”。现在,插入将发生在带有触发器的表上。但是,现在 PetaPoco 无法从新插入的行中检索新的主键(身份)。

2)转到PetaPoco.Database.Insert函数。就在该行上方:

object id = _dbType.ExecuteInsert(this, cmd, primaryKeyName);

添加一个新行,所以它看起来像这样:

 cmd.CommandText += ";\nSELECT SCOPE_IDENTITY() AS NewID;";
 object id = _dbType.ExecuteInsert(this, cmd, primaryKeyName);

新行(存在于 PetaPoco 中,但未使用)将允许插入语句检索身份。

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

PetaPoco 在带有触发器的表上插入失败 的相关文章

随机推荐

  • 能够使用一个命令推送到所有 git 远程吗?

    而不是这样做 git push origin all git push nodester all git push duostack all 有没有一种方法可以只用一个命令来做到这一点 谢谢 创建一个all其名称带有多个存储库 URL 的远
  • 使用 React Suspense 和 React.lazy 子组件进行 Jest/Enzyme 类组件测试

    因此 我将类组件中使用的导入转换为 React lazy import api 并将其包装在 Suspense 标记中 当我测试该类组件时 酶抛出错误 Enzyme Internal Error unknown node with tag
  • 具有动态数据的 SwiftUI 分层选取器

    我正在尝试在 SwiftUI XCode 11 3 1 中使用带有动态数据的多个选择器 该应用程序有时会崩溃 有时会冻结或在模拟器和运行 iOS 13 3 1 的真实设备上的选择器中显示错误的数据 我尝试了答案中的建议这个问题 https
  • Flutter ListView 双向延迟加载(向上、向下)

    我希望在 flutter 中有一个 ListView 它提供两个方向 向上 向下 的延迟加载 例子 后台数据库理论上可以显示60000条信息 首先我想显示项目 100 120 从这些索引中 我希望能够在延迟加载新项目时上下滚动 需要考虑的事
  • 模板类中模板方法的声明模板定义之外

    有谁知道模板类中声明外模板方法的语法 例如 template
  • 在 asp.net MVC 中对表进行排序

    我想知道人们如何在 ASP NET MVC 中对表进行排序 我听说过 javascript 解决方案可以很好地处理非分页表 例如 jquery 的表排序器 但我需要一个可以处理分页表的解决方案 我正在做的项目目前使用以下解决方案 但我发现它
  • Haskell 将 Float 转换为 Int

    我还是个新手 试图创建一个在函数中使用的列表 并希望使其尽可能小 恰好是 logBase x y 但我无法将 logBase 转换为我可以在此列表中使用的内容 1 logBase x y 有什么建议么 您没有发布您收到的类型错误 但我想它是
  • int24 - 24 位整数数据类型

    C 中有 24 位原始整型数据类型吗 如果没有 是否可以创建一个类 int24 uint24 其目的可能是 处理 24 位格式的声音文件 在没有 alpha 通道的情况下操作位图数据 根据要求 我将使用位字段 struct int24 un
  • 使用 Linux 帧缓冲区进行图形处理,但禁用控制台文本

    我有一些 C 代码 可以在 Linux 帧缓冲区控制台上绘制简单的图形 我还使用树莓派及其复合视频输出 操作系统是 raspbian 我正在做一个不使用 X 的低级解决方案 我的图形运行良好 而且我还能够读取 USB 键盘并对按键做出响应
  • artifact:install 推送 super-pom 而不是我定义的 POM

    我在 Ant 文件中定义了一个 POM 构建工作正常 从存储库中提取正确的工件 但是 工件 安装任务推送到 super pom 而不是我指定的 pom 我使用以下 POM 文件
  • Olive (Mono) 如何实现 (W)PF?

    在阅读一本维基百科上有关 Mono 的文章 http en wikipedia org wiki Mono 28software 29 我发现有一个 Mono 子 副项目叫做Olive http mono wikia com wiki Ol
  • 使用正则表达式解析多行日志条目

    我正在尝试使用以下正则表达式解析 C 应用程序中的日志条目 0 9 4 0 9 2 2 3 1 对于格式如下的日志 日期 某种格式 level 应用程序名称 信息 哪里 我认为 匹配行的开头 启用 gm在正则表达式101上 0 9 4 0
  • 提交 JTA 事务后可以回滚它吗?

    我有一个提交的 JTA 事务 提交后可以回滚吗 如果是 怎么办 我有以下情况 我有一个更新了 3 个 DB 的后端层 我已经使用了 JTA 用户交易 如果任何数据库中的更新失败 则使用 utx rollback 回滚对 3 个数据库的所有更
  • 如果用纯 C++ 表示静态?

    简而言之问题 怎样才能实现static if在 c 11 中提出的功能 用普通的 c 历史和原始问题 最近我遇到了这样一个问题 我需要上课Sender具有类似的界面 class Sender void sendMessage void se
  • 证明强可能素数的素性

    使用米勒 拉宾测试的概率版本 我生成了中大 200 300 位 可能素数的列表 但可能还不够好 我需要know这些数字是素数 是否有一个库 最好是用 Python 包装或可包装 可以实现更有效的素性证明算法之一 或者 有谁知道我在哪里可以找
  • 如何从 PDO 失败“错误!:SQLSTATE[HY093]:无效的参数号:参数未定义”中获取更多信息?

    每隔一段时间 我就会在 PDO 中遇到如下错误 错误 SQLSTATE HY093 参数号无效 参数未定义 有没有办法获得更具体的错误 例如行号 文件名 缺少的参数等 而不是模糊的消息 首先 确保 PDO 设置为在错误时抛出异常 pdo g
  • 如何从另一个平面/简单配置单元表加载带有map[structs]的配置单元表

    我在 hive 中有 2 个表 其中有 Order 和 Order Detail 具有 1 n 关系并在 order id 上连接 我试图利用 hive 复杂数据类型 map struct 将其加载到单个表中 假设 ORDER 有以下数据
  • Eclipse CDT 新项目模板 - 如何添加库

    在 Eclipse CDT Indigo 中 有一个新功能允许您将新的 C C 模板项目添加到新项目向导中 我已经弄清楚如何在一定程度上成功地做到这一点 我可以创建一个仅依赖于简单源文件的基本项目 但现在我想创建一个 CPPUnit 项目
  • Python、Chrome 任务管理器 - 以编程方式访问 Chrome 任务管理器的文本而不使用 CHROMIUM

    因此 由于许多人都遇到过 Chrome 的内存使用量可能会让人衰弱的情况 所以我想以编程方式访问 Chrome 的任务管理器 或类似的东西 显示选项卡 它们的 PID 和子帧 如果可能 这样我就可以创建一个脚本来杀死它们 经过大量阅读 很多
  • PetaPoco 在带有触发器的表上插入失败

    我们使用 PetaPoco 作为 SQL 2008 数据库的数据访问工具 当尝试在附加了触发器的表上插入 更新行时 我们遇到了问题 我们正在使用 PetaPoco 的 db Save object 显示的错误是 如果 DML 语句包含 OU