我目前正在开发一个项目,其中DAL使用ADO Entity Framework在.Net中实现。
数据库结构并不直观,我希望能够确保一些数据库操作是原子的。
我知道可以通过创建一个 STORED PROCEDURE
并使用 DB TRANSACTION
(如在此SO文章中提到的)来实现。 (我正在使用SQL Server)
问题是,我希望尽可能地将逻辑保留在软件端,并考虑使用 .Net TransactionScope
。 尽管我理解从软件角度来看它工作得很好(在整个范围未提交之前不会向数据库提交任何内容),但我怀疑它是否仍然确保了DB原子执行。
有人知道这方面的信息吗?
更具体地说,通常代码看起来像这样:
using (TransactionScope scope = new TransactionScope())
{
/*
* Do some opreations such as reads, write, insert, deletes
*/
scope.Commit()
}
我希望确保括号内的所有内容都是“原子性”的(我猜想是隔离=SERIALIZABLE)。我的意思是,在代码范围内执行时,不希望数据库状态能够改变。
TransactionScope
是一种通过隐式线程本地事务来帮助处理此类事务的方法(可以节省传递参数的麻烦)。 - user166390