是否值得在 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/