根据这个other SO答案,似乎SQLite不会自动强制执行外键关系,并且必须在每个连接中明确启用它。这是一个报告issue与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一起使用时(注明here),尽管后者支持它。这可能与原始问题有关,默认情况下SQLite的FK强制执行被禁用,如果首先启用它,它将正常工作。