当使用SQLite时,Fluent Nhibernate是否自动在所有CreateSQLQuery调用上设置外键约束?
本文关键字:调用 CreateSQLQuery 设置 约束 SQLite Fluent 是否 Nhibernate | 更新日期: 2023-09-27 18:01:33
所以我试图升级一个SQLite数据库。我的升级要求我更改列数据类型。因此,我的思维过程是这样做的(我将把表称为foo
):
- 创建
foo_temp
表 将foo中的旧数据插入 - 修改
foo_temp
表为foo
foo_temp
表。删除旧的foo
表。但是,由于外键约束,它在第3步失败了。我已经尝试了一切,从插入PRAGMA foreign_keys = OFF;
之前的下降,追加foreign keys=false;
到连接字符串。看起来Fluent Nhibernate不会让我删除这个表。也许当我配置"流畅"连接时,我可以禁用设置?我好像找不到它了。
我注意到,当我去使用一个UI客户端(如SQLiteSpy),它没有问题,删除表。是什么原因造成的呢?
所以我想出了一个似乎有效的解决方案。使用我在这里找到的代码(归功于ppiotrowicz):
在nhibernate中启用SQLite外键
我基本上把PRAGMA foreign_keys = ON
换成了PRAGMA foreign_keys = OFF
,并使用SQLiteConfiguration.Standard.ConnectionString(cs).Driver<MyDriver>()
引用了该驱动程序