代码之家  ›  专栏  ›  技术社区  ›  JasCav

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

  •  0
  • JasCav  · 技术社区  · 15 年前

    在开发数据库时,我正在努力确保数据的完整性。因此,举个例子,当一本书的作者从数据库中删除时,应该删除它(反之亦然),假设只有一个作者。

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

    我的第二个问题是:当我将一行添加到表中时,数据库是否确保我拥有该行所需的所有适当信息(例如,我不能添加没有作者的书),或者我是否需要在业务逻辑中自己确保这一点?如果我尝试使用Linq to SQL执行此操作,会发生什么?我可以例外吗?

    谢谢你的帮助。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Stephen Cleary    15 年前

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

    引用完整性将由数据库强制执行;在这种情况下,您应该先添加作者,然后添加图书。如果您违反了引用完整性,您将得到一个异常。

        2
  •  1
  •   Curtis White    15 年前

    对于第二个问题,您可能对使用事务感兴趣。例如,您需要向数据库中添加几个对象,并确保所有对象都被添加或不添加。这就是数据库事务所完成的。而且,是的,您应该在数据/业务层中这样做,您可以通过向DataContext类添加分部类来做到这一点。如果您的业务流程声明,例如,每个用户都必须具有地址或类似性质的内容。这取决于您的案例场景。

    Linq自动使用事务,前提是您在一个单一的(使用)中,即在这一步中执行所有操作。

    如果需要执行多个步骤或与非LINQ数据库操作结合,则可以使用事务范围。您需要启用分布式事务服务。这允许跨文件和数据库进行事务处理。

    请参阅TransactionScope

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