【发布时间】:2013-01-01 17:40:52
【问题描述】:
伙计们,你们一定在想我为什么要这样做......我可能错了,但我正在设计一个系统
它有以下几层
- 数据访问层(处理 sql 事务)
- 数据管理员
- 表示层
数据管理器调用数据访问层进行sql事务。 表示层中的特定功能调用多个数据管理器来完成它的工作......
如果每个数据管理器为数据访问类创建单独的实例并且它们不共享事务,则表示层的一个函数在多个事务中执行 sql,并且其中一个事务失败,它将回滚该事务并且不会影响其他交易。我们不希望这样……我们希望回滚所有恰好完成该表示层功能的事务。
我不知道如何实现...
我的设计不正确吗? 有什么建议吗???
我正在使用 SQL Server 2008 和 C# 以及 .Net 4.0
【问题讨论】:
-
您需要使用 System.Transactions 命名空间,然后在需要的地方创建或注册现有事务。请务必了解隔离级别和底层 DB/MSDTC 默认值。另见stackoverflow.com/a/2273428/30225
-
在我看来,数据库级事务应该谨慎使用或根本不使用。你的策略听起来很容易陷入僵局。
标签: sql-server transactions connection data-access-layer sharing