0

根据 SQLite 文档,从 3.7.0 版开始,递归触发器应该默认启用。但是,当我使用 3.8.8.3 版(特别是使用 NuGet 的 System.Data.SQLite 核心)打开与数据库的连接并检查编译指示时,它们被设置为“0”或关闭,果然,它们没有递归触发。

如果我在使用 3.8.2 的开源工具 Sqlite 浏览器之类的东西中打开数据库,它也会显示 pragma 设置为关闭。我可以在 UI 中启用它们,但是一旦我关闭,然后重新打开数据库,它们就会再次关闭。怎么回事?!!

我什至尝试添加“PRAGMA RECURSIVE_TRIGGERS = 1;” 到连接字符串,一些在线文档说应该可以工作,但当然不能。

我还查看了 SQLiteConnectionStringBuilder,虽然它确实提供了对其他与编译指示相关的东西(例如二进制 GUID)的参考,但它没有对递归触发器的参考,这让我更加相信您不能为此使用连接字符串。

简而言之,这破坏了我们的应用程序。我们依赖于数据完整性的递归触发器。

我们唯一的解决方案是手动编辑应用程序用来添加编译指示的每个 SQL 查询,这真是个婊子!

所以......谁能帮我弄清楚为什么默认情况下没有启用递归触发器?

4

1 回答 1

2

由于向后兼容,默认情况下不启用它们。

正如您已经提到的,在 3.7.0 之前没有递归触发器。一旦它们被引入,如果默认启用它们会破坏很多生产环境。

相反,选择了谨慎的方法,并且支持它们,但默认情况下不启用。让每个人都采用它,让它成为一个通用的东西,然后它可以默认启用。就像@CL 说的那样——它们可能会在未来的 SQLite 版本中默认启用。

于 2015-05-27T12:49:18.883 回答