c# - 有什么充分的理由不依赖业务逻辑中的数据库 key 完整性吗?

标签 c# .net sql entity-framework business-logic

我正在编写一个允许插入到我的数据库中的链接表的方法,我想知道我是否需要首先检查以确保指定的 PK 确实存在于链接表中。在我看来,我可以 100% 地依赖数据库来为我强制执行这些 FK 约束,并通过表的 PK 防止重复的表条目,这似乎是合乎逻辑的。事实上,如果数据库无论如何都要检查它们,那么事先检查这些对我来说似乎是多余的和浪费资源。另外请注意,我在这里谈论的是非常基本的 RDBMS 概念;我希望即使切换到另一种数据存储机制,它们也能同样得到执行。

那么在这种情况下,有什么理由不完全依赖数据库来保证FK和PK的数据完整性呢?换句话说:

using (var context = new MyDbContext()) {
    try {
        context.LinkEntries.Add(new LinkEntry { key1 = x, key2 = y });
        return context.SaveChanges() > 0;
    }
    catch (DbUpdateException) {
        // Duplicate, or foreign key violation
        return false;
    }
}

最佳答案

关系数据库将强制执行引用完整性 - 假设您已正确设置外键。

1) 这将确保 key1key2 实际上指向主表中的行。

2) 如果您还想确保链接表中只能存在具有一对特定外键的行,则必须在数据库中对这些列添加唯一约束。

如果您使用这对外键作为您的链接表主键,您应该没问题。

关于c# - 有什么充分的理由不依赖业务逻辑中的数据库 key 完整性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15927515/

相关文章:

c# - 使用 BinaryFormatter 将自动实现的属性更改为正常和反序列化

c# - 尝试启动多个线程时索引超出数组范围

c# - Azure AD B2C 和图 : cannot list users with memberOf

c# - 如何每 N 分钟重置一个递增计数器

c# - 为什么我的 ListView 不能正确显示详细信息 View ?

mysql - SQL查询获取数据

c# - 强制使用 Serilog 中的特定参数(或通常在外部函数中)

c# - 如何从一个字符串复制到另一个字符串,从所需位置到结尾?

sql - 从字符串中的第三个逗号中选择

mysql - SQL:有条件 SUM