- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的关系非常简单,我的模型如下所示:
public class Project
{
[PrimaryKey, AutoIncrement]
public int ID { get; set; }
public string Name { get; set; }
[ForeignKey(typeof(User))]
public int ProjectManagerID { get; set; }
[ManyToOne]
public User ProjectManager { get; set; }
}
public class User
{
public string Login { get; set; }
[OneToMany]
public List<Project> Projects { get; set; }
}
问题是我可以很容易地保存项目,在不保存用户的情况下引用用户,而且我没有得到任何违反约束的异常。
database.Insert(new Project
{
Name = "aaa",
ProjectManagerID = 8
});
我什至可以使用无效的用户 ID 查询我的项目,但我在用户表中没有存储任何记录。另一件有趣的事情是,当我打开这个数据库时,我无法像上面那样在我的 SQLite 管理工具中存储行,所以我确定我的数据库模式是正确的。
这在带有 sqlite-net-extensions 的 sqlite-net PCL 库中是否正常?
更新:我的sqlite版本是3.8.7.4
最佳答案
是的,这很正常。 SQLite-Net Extensions 建立在 SQLite-Net 之上,不支持外键约束,因此没有在数据库层声明外键。
使用 SQLite-Net 核心方法,[ForeignKey]
属性只是一个整数属性,没有任何限制,因此您可以随意修改它而不会出现运行时错误。
如果您的项目需要在数据库层进行外键约束,您可以使用Execute
方法手动将约束添加到您想要的列。
更新:
在 SQLite 中默认禁用外键。要在 SQLite-Net 中启用外键,您必须将以下代码添加到程序的开头。该语句不会持久化在数据库中,每次应用程序启动时都必须执行:
database.Execute("PRAGMA foreign_keys = ON");
要检查它是否已启用,您可以使用 PRAGMA foreign_keys
:
int result = database.ExecuteScalar<int>("PRAGMA foreign_keys");
if (result == 1) {
// Foreign keys enabled
}
启用后,您可以将外键添加到表声明 ( sqlite doesn't support adding constraints on ALTER
statements ),如下所示:
CREATE TABLE child (
id INTEGER PRIMARY KEY,
parent_id INTEGER,
description TEXT,
FOREIGN KEY (parent_id) REFERENCES parent(id)
);
显然,手动创建表会强制您不使用 SQLite-Net CreateTable
语句。
关于c# - ManyToOne 约束不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28408073/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!