我只是在这里感到困惑(也许我错过了什么?)
我一直在努力弄清楚为什么我的SQLite数据库使用sqlite-net-extensions上的示例创建的没有创建外键关系
答案 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”属性实际上并没有为您提供外键关系。
这不是一个外键,不应该以某种方式命名它 - 在我看来这是非常危险的。
再一次 - 感谢那些向我们其他人发布所有代码的人 - 希望这可能有助于其他喜欢我的人正在努力解决他们的问题做错了。