SQLite和SQLite Net Extensions - 外键约束在哪里?

时间:2016-04-15 12:58:43

标签: sqlite foreign-key-relationship sqlite-net-extensions

我只是在这里感到困惑(也许我错过了什么?)

我一直在努力弄清楚为什么我的SQLite数据库使用sqlite-net-extensions上的示例创建的没有创建外键关系

1 个答案:

答案 0 :(得分:2)

我真的非常感谢社区中的人们花时间为我们其他人打包,记录,发布和维护他们的真棒代码这一事实 - 我真的这样做。

所以感谢SQLite,SQLiteNet和SQLite Net Extensions的所有贡献者。 Frank Krueger,Oystein Krog,GuillermoGutiérrezDoral以及其他所有人。

然而.... 呃,什么!

我在SO post

中找到了答案
  

是的,这很正常。 SQLite-Net Extensions建立在之上   SQLite-Net,它不支持外键约束,所以   在数据库层没有声明外键。

     

使用核心SQLite-Net方法,[ForeignKey]属性只是一个   整数属性,没有任何限制,所以你可以   随意修改它,没有运行时错误。

即。 ForeignKey 属性的名称非常具有误导性。它实际上是作为一个简单的索引实现的

e.g。 “Valuation_StockId”在数据库级别为您提供没有数据完整性约束

所以你可以(在数据库级别直接插入非连贯且不受约束的数据),例如引用不存在的股票(通过它的股票StockId)的估值。

不仅如此,代码库中没有任何内容阻止您做同样的事情。

因此请注意,“ForeignKey”属性实际上并没有为您提供外键关系。

这不是一个外键,不应该以某种方式命名它 - 在我看来这是非常危险的

再一次 - 感谢那些向我们其他人发布所有代码的人 - 希望这可能有助于其他喜欢我的人正在努力解决他们的问题做错了。