5

根据this other SO answer,SQLite似乎不会自动强制执行外键关系,并且必须为每个连接显式启用。这是 ServiceStack.OrmLite 的一个报告问题。我自己用 ServiceStack.OrmLite 3.9.33 和 SQLite 1.0.84 重现了这种行为,其中单元测试成功(允许删除具有外键引用的记录)但实际应用程序(合法地)失败。

我不清楚的是如何/在哪里执行必要的“PRAGMA foreign_keys = ON;” SQL 命令,使其适用于我的 SQLite 单元/集成测试的任何连接,但不适用于我的主要 SQL Server 连接。理想情况下,它似乎是 IDbConnectionFactory 注册的一部分。

任何人都可以帮忙吗?

编辑:级联删除将是处理这种情况的另一种方法,但是尽管使用ForeignKey属性在我的 FK 列上正确设置了这一点,但 ServiceStack.OrmLite 在与 SQLite 一起使用时似乎不遵守这一点(在此处注明),尽管后者支持为了它。这可能与原始问题有关,默认情况下禁用 SQLite 的 FK 强制执行,如果首先启用它,它将正常工作。

4

0 回答 0