使用SQLite和C#强制执行外键约束

时间:2019-04-16 13:41:12

标签: c# sqlite

我在数据库中创建了一个外键约束 ON DELETE SET DEFAULT ,并分配了一个默认值。

我尝试过的事情:

  • 在App.Config中:我在连接字符串中添加了“ foreign keys = true; ”。
  • I edited the dataset XSD
  • 我在WinForm上更改了数据集并在其中强制执行: EnforceConstraints = true
  • 我检查了一下,我的SQLite版本已经足够支持此功能(我使用v1.0.110.0)
  • 我无法使用PRAGMA命令(如此处显示:Enabling Foreign key constraints in SQLite),因为数据已绑定到控件。
  • 我重建了项目。
  • 我在SqliteStudio中进行了尝试,约束在这里有效,但在C#中却没有。

我可能错过了什么...

更新: App.Config以某种方式与项目设置解除同步,因此额外的参数未包含在构建中。但是,通过项目属性添加参数会引发错误。

"Data Source=.\InventoryManagerDatabase.db;foreign keys=true;" 

错误:

  

System.InvalidOperationException:'未知的连接字符串参数'外键'。

显然此参数不存在?我检查了各种资源,包括Enabling Foreign key constraints in SQLiteSQLite EF6 programmatically set connection string at runtime,但这很奇怪... 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

但是什么都不起作用...

1 个答案:

答案 0 :(得分:0)

终于找到了!

解决方案:

connectionString="Data Source=.\YourDatabaseName.db;Foreign Key Constraints=On;Version=3;"

是的,他们在某处将其更改为 Foreign Key Constraints = On ,并且Google的每个页面(包括StackOverflow)仍显示旧参数...