在开发数据库时,我正在努力确保数据的完整性。因此,例如,假设有一位作者从数据库中删除其作者(但反之亦然),则应删除该书。
当我设置外键时,我确实设置了一个CASCADE,所以如果我从LINQ执行删除,我觉得这应该会自动发生。这是真的?如果没有,我是否需要自己执行所有删除操作,或者如何完成删除?
我的第二个问题是:数据库是否确保我将所有相关信息添加到表格中(例如我无法添加一本书有作者),还是我需要在业务逻辑中确保这一点?如果我尝试使用LINQ to SQL执行此操作会发生什么?我会得到例外吗?
感谢您的帮助。
答案 0 :(得分:1)
级联外键会自动为您删除删除。
参考完整性将由数据库执行;在这种情况下,您应首先添加作者,然后添加书籍。如果你违反了参考完整性,你将获得例外。
答案 1 :(得分:1)
听起来您可能对使用交易感兴趣的第二个问题。例如,您需要向数据库添加多个对象,并希望确保添加所有对象或不添加任何对象。这是数据库事务完成的。并且,是的,您应该在数据/业务层中执行此操作,您可以通过向datacontext类添加部分类来完成此操作。如果您的业务流程声明,例如,每个用户必须具有ADDRESS或具有该性质的东西。这取决于您的情况。
LINQ会自动使用交易,前提是您在单个(使用)中,即您只需一步即可执行所有操作。
如果需要执行多个步骤或与非LINQ数据库操作结合使用,则可以使用事务范围。您需要启用DISTRIBUTED TRANSACTION SERVICE。这允许跨例如文件和数据库进行交易。
参见TransactionScope
using (TransactionScope scope = new TransactionScope())
{
do stuff here
scope.Complete
}