0

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

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

4

1 回答 1

3

我真的非常感谢社区中的人们花时间为我们其他人打包、记录、发布和维护他们出色的代码——我真的很感激。

因此,感谢SQLite、SQLiteNet 和 SQLite Net Extensions 的所有贡献者。Frank Krueger、Oystein Krog、Guillermo Gutiérrez Doral 和其他所有人。

然而....呃,什么!

我在这篇SO 帖子中找到了答案

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

使用核心 SQLite-Net 方法, [ForeignKey] 属性只是一个没有任何限制的整数属性,因此您可以随意修改它而不会出现运行时错误。

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

例如,“Valuation_StockId”让您在数据库级别没有数据完整性约束。

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

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

所以要小心,属性“ForeignKey”实际上根本没有为您提供外键关系。

它不是外键,不应该以暗示它的方式命名 - 在我看来这真的很危险

再次感谢那些将所有代码发布给我们其他人的人 - 希望这可以帮助像我这样正在努力找出他们做错了什么的其他人。

于 2016-04-15T12:58:42.903 回答