C#TransactionScope - L2E

jon*_*ers 5 .net c# linq-to-entities transactions transactionscope

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

MS文档中,它表示ObjectContext.SaveChanges()中的SQL调用都在内部集成到一个事务中.

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

Big*_*ian 3

乔恩,不,您不需要使用 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");
    }
Run Code Online (Sandbox Code Playgroud)

请注意刷新、重新保存,这可以解决您的问题。您可以通过从 try 块中抛出异常来测试这一点。

此致