gpt4 book ai didi

asp.net - SQL 事务 : Best Way to Implement in ASP. 网络

转载 作者:太空狗 更新时间:2023-10-30 01:55:18 24 4
gpt4 key购买 nike

我有一个应用程序,它有许多不同类型的对象,每个对象都将自己保存回数据库。到目前为止,这在没有交易的情况下工作得很好,我不想疯狂地添加它们。但是偶尔需要在整个对象集合开始更新之前启动事务,以确保只有在集合中的所有对象都成功时才真正更新数据库。

例如,假设我有一组苹果。向集合发出命令以更新所有苹果。 [交易开始应该在这里] 每个苹果执行代码来更新自己。 [事务提交/回滚应该发生在这里]。

我遇到的问题是现在每个更新都是原子的(没有明确包装在事务中)。我可以将一个 id 传递给每个“苹果”,以识别已隐藏在某种缓存中的事务,但存在缓存在更新过程中失效并导致不必要的问题的风险。

那么最好的方法是什么?

最佳答案

首先,我不会处理页面中的事务逻辑。编写某种业务类来执行此操作 - 服务、数据实用程序类,您可以从 ASP.Net 中抽象出来。

接下来,如果您使用的数据库可以订阅分布式事务,例如 SQL Server,您可能会考虑使用 TransactionScope 类(在 System.Transactions 命名空间中,引用 System.Transactions.dll)。

using(TransactionScope scope = new TransactionScope())
{
SaveObjectOne(); //these are just psuedo-code statements
SaveObjectTwo(); //replace these with your code that saves various objs
SaveObjectThree();
scope.Complete(); //this commits the transaction, unless exception throws
}

TransactionScope 实现 IDisposable,因此当 using 调用 Dispose() 时,如果从未调用过 Complete(),事务将回滚。您确实需要启用分布式事务处理协调器才能使用 TransactionScope

关于asp.net - SQL 事务 : Best Way to Implement in ASP. 网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/313199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com