添加和删​​除时确保数据库完整性

时间:2010-05-14 21:07:17

标签: database linq linq-to-sql sql-server-2008

在开发数据库时,我正在努力确保数据的完整性。因此,例如,假设有一位作者从数据库中删除其作者(但反之亦然),则应删除该书。

当我设置外键时,我确实设置了一个CASCADE,所以如果我从LINQ执行删除,我觉得这应该会自动发生。这是真的?如果没有,我是否需要自己执行所有删除操作,或者如何完成删除?

我的第二个问题是:数据库是否确保我将所有相关信息添加到表格中(例如我无法添加一本书有作者),还是我需要在业务逻辑中确保这一点?如果我尝试使用LINQ to SQL执行此操作会发生什么?我会得到例外吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

级联外键会自动为您删除删除。

参考完整性将由数据库执行;在这种情况下,您应首先添加作者,然后添加书籍。如果你违反了参考完整性,你将获得例外。

答案 1 :(得分:1)

听起来您可能对使用交易感兴趣的第二个问题。例如,您需要向数据库添加多个对象,并希望确保添加所有对象或不添加任何对象。这是数据库事务完成的。并且,是的,您应该在数据/业务层中执行此操作,您可以通过向datacontext类添加部分类来完成此操作。如果您的业务流程声明,例如,每个用户必须具有ADDRESS或具有该性质的东西。这取决于您的情况。

LINQ会自动使用交易,前提是您在单个(使用)中,即您只需一步即可执行所有操作。

如果需要执行多个步骤或与非LINQ数据库操作结合使用,则可以使用事务范围。您需要启用DISTRIBUTED TRANSACTION SERVICE。这允许跨例如文件和数据库进行交易。

参见TransactionScope

using (TransactionScope scope = new TransactionScope())
{
do stuff here
scope.Complete
}