c# - 使用 SQLite 和 C# 强制外键约束
问题描述
我在数据库中创建了一个外键约束ON DELETE SET DEFAULT并分配了一个默认值。
我尝试了什么:
- 在 App.Config 中:我在连接字符串中添加了“ foreign keys=true; ”。
- 我编辑了数据集 XSD
- 我更改了 WinForm 上的 DataSet 并在那里强制执行:EnforceConstraints = true
- 我检查了,我的 SQLite 版本足够高来支持这个(我使用 v1.0.110.0)
- 我不能使用 PRAGMA 命令(如下所示:在 SQLite 中启用外键约束),因为数据绑定到控件。
- 我重建了项目。
- 我在 SqliteStudio 中尝试过,并且约束有效,但在 C# 中却没有。
我可能错过了什么......
更新: App.Config 以某种方式与项目设置不同步,因此额外参数未包含在构建中。但是,通过项目属性添加参数会引发错误。
"Data Source=.\InventoryManagerDatabase.db;foreign keys=true;"
错误:
System.InvalidOperationException:'未知的连接字符串参数'外键'。
显然这个参数不存在?我检查了各种资源,包括在 SQLite和SQLite EF6中启用外键约束,在运行时以编程方式设置连接字符串,但这很奇怪...... SQLite 删除了这个参数还是重命名了它?
我也尝试过(以及区分大小写的组合):
EnforceFKConstraints=True;
foreign key=true;
foreign keys=true;
foreign_keys=true;
ForeignKeys=true;
Foreign Key Constraints=true;
PRAGMA foreign_keys = ON; // obviously does not work
但是没有任何效果...
解决方案
终于找到了!
解决方案:
connectionString="Data Source=.\YourDatabaseName.db;Foreign Key Constraints=On;Version=3;"
是的,他们在某处将其更改为Foreign Key Constraints=On并且 Google 上的每个页面(包括 StackOverflow)仍然显示旧参数...
推荐阅读
- c# - 为什么我的按钮不使用我创建的样式?
- python - 通过按下具有不同输入值的按钮动态调用函数
- javascript - 如何同时在 vue js 上添加两个转换?
- javascript - 代码重构。试图改进我的代码
- python-3.x - Python 硒火狐使用 .click() 选择
- python - 用一个简单的语句制作两个条件/循环语句在一条 python 行中工作
- makefile - 试图理解为什么 make 失败
- mysql - 通过 vsts 调用表达式返回以代码“1”退出
- amazon-web-services - 将云端请求重定向到新 URL
- angular - PrimeNg 饼图 - 默认显示所有工具提示?