C# TransactionScope - L2E

标签 c# .net transactions linq-to-entities transactionscope

是否值得在 Linq to Entities 上使用 System.Transactions.TransactionScope?

关于MS documentation ,它表示 ObjectContext.SaveChanges() 中的 SQL 调用都在内部汇总到一个事务中。

我们有 1 个数据库连接,即文件系统上的本地 SQLite 数据库。我们只是想确保我们对数据库的所有操作都是原子的,我们需要 TransactionScope 吗? 即当我们调用某些删除、更新、插入等操作时,我们希望它们全部发生或根本不发生。

最佳答案

Jon,不,你不需要使用 TransactionScope。开放式并发由 Linq 自动处理。您提供的链接中的代码示例很好地解释了这一点,您不必自己回滚事务。我将使用与示例中相同的代码:

    try
    {
        // Try to save changes, which may cause a conflict.
        int num = context.SaveChanges();
        Console.WriteLine("No conflicts. " +
            num.ToString() + " updates saved.");
    }
    catch (OptimisticConcurrencyException)
    {
        // Resolve the concurrency conflict by refreshing the 
        // object context before re-saving changes. 
        context.Refresh(RefreshMode.ClientWins, orders);

        // Save changes.
        context.SaveChanges();
        Console.WriteLine("OptimisticConcurrencyException "
        + "handled and changes saved");
    }

注意刷新、重新保存,这会处理您的问题。您可以通过从 try block 中抛出异常来对此进行测试。

最好的问候

关于C# TransactionScope - L2E,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2363969/

相关文章:

c# - 无法将.Net Core 2.0项目的项目引用添加到Azure函数项目(netStandard2.0)

java - PersistenceUnitInfo [appName] 有事务类型 JTA,但没有定义 jtaDataSource

c# - 反序列化时忽略过时的字段

c# - EPPlus Excel 行高不一致

c# - 从未绑定(bind)列中的 DataGridViewComboBoxCell 获取选定索引和选定项

c# - 如何在 C# 中按列表列表分组并将其合并为单个列表而不重复?

.net - 无法在 visual studio 2019 中运行 IIS Express

c# - 是否可以将 PDF 作为 HTML 嵌入到电子邮件中?

transactions - 事务性和非事务性的区别

c# - 你能在一个事务中有多个 MySqlCommand 吗?