实体框架环境事务

use*_*875 2 c#

我读过当 aDbContext.SaveChanges()运行时,所有操作都会在幕后自动包装在一个事务中。也就是说,如果内部的任何操作SaveChanges()失败,一切都会回滚以保持一致的状态。

但是,我多次遇到的一个术语是更改可以作为环境事务的一部分运行。这到底是什么意思呢?

我的具体问题是:我有一个多线程应用程序,其中每个操作都有一个上下文。我的 DbContext 对象都没有跨不同线程共享。我能保证每个操作都DbContext.SaveChanges()在单独的事务中运行吗?

Mob*_*isk 5

在您的情况下,是的,您可以保证每个 DbContext.SaveChanges() 将在单独的事务中运行。

术语“环境”事务是指在调用堆栈中启动的事务。所以这是一个每线程的概念。请参阅Transaction.CurrentTransactionScope。这是一项允许您执行以下操作的功能:

using (TransactionScope scope123 = new TransactionScope())
    {
        using (SqlConnection connection1 = new SqlConnection(connectString1))
        {
            // Do some work
            using (SqlConnection connection2 = new SqlConnection(connectString2))
            {
                // Do some more work
            }
        }
Run Code Online (Sandbox Code Playgroud)

上述两个连接都自动使用“环境”事务“scope123”。听起来实体框架现在知道如何做到这一点。但是 TransactionScope 不会跨线程,所以你没问题。而且听起来您无论如何都没有明确创建事务范围。