我有一个 DAL 基类,它集中了我的应用程序中的所有数据库调用代码。我想确保所有插入/更新/删除操作都包含在事务中,无论它是否写入 SP。将我的“ExecuteNonQuery”DAL 方法包装在 TransactionScope 中是否是一个好习惯,或者我是否会为不需要它的数据库调用添加大量开销。
当需要包装多个服务调用时,我很高兴在 UI 中使用 TransactionScope ,它实际上只是在 SP 级别强制执行,我不确定。
我使用 .net 3.5,主要使用 SQLServer 2008,一些客户仍在使用 2005 - 希望尽快将其转移。
谢谢
最佳答案
Tsansactions(尤其是诸如 TransactionScope
之类的重量级操作,即使使用 LTM)主要在应用多个操作时启动,这些操作可能跨越多个数据库调用。
添加事务可能很重要,但它改变了查询的性质;您可以引入最明显的死锁,但您也可以更改错误方法的预期副作用。它还可以修复一个意外的副作用。它改变了锁定配置文件,并且具有不同的系统要求(启用 DTC 是最明显的)。
所以不要闲着添加它们。
同样,许多只读 View 屏幕不需要任何特殊的锁定;哎呀,如果您看到正在进行的带有幻像/脏/不可重复/等数据的事务,大多数列表/搜索/等不会以任何重要方式发生变化。
就个人而言,当我使用基于 SP 的代码时,我并不倾向于将事务管理放在 SP 中 - 将其提升到具有更复杂的故障管理的更高级别 - 即除了 TSQL 之外的几乎所有内容,TSQL 并不打算擅长像这样的程序管道代码。显然,它擅长基于集合的 DML。
关于.net - 始终在 DAL 基类中使用 TransactionScope 是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6151986/