当使用SQLite时,Fluent Nhibernate是否自动在所有CreateSQLQuery调用上设置外键约束?

本文关键字:调用 CreateSQLQuery 设置 约束 SQLite Fluent 是否 Nhibernate | 更新日期: 2023-09-27 18:01:33

所以我试图升级一个SQLite数据库。我的升级要求我更改列数据类型。因此,我的思维过程是这样做的(我将把表称为foo):

  1. 创建foo_temp
  2. 将foo中的旧数据插入foo_temp表。删除旧的foo表。
  3. 修改foo_temp表为foo

但是,由于外键约束,它在第3步失败了。我已经尝试了一切,从插入PRAGMA foreign_keys = OFF;之前的下降,追加foreign keys=false;到连接字符串。看起来Fluent Nhibernate不会让我删除这个表。也许当我配置"流畅"连接时,我可以禁用设置?我好像找不到它了。

我注意到,当我去使用一个UI客户端(如SQLiteSpy),它没有问题,删除表。是什么原因造成的呢?

当使用SQLite时,Fluent Nhibernate是否自动在所有CreateSQLQuery调用上设置外键约束?

所以我想出了一个似乎有效的解决方案。使用我在这里找到的代码(归功于ppiotrowicz):

在nhibernate中启用SQLite外键

我基本上把PRAGMA foreign_keys = ON换成了PRAGMA foreign_keys = OFF,并使用SQLiteConfiguration.Standard.ConnectionString(cs).Driver<MyDriver>()引用了该驱动程序