自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深入分析EF Core事務(wù)提交,分布式事務(wù)

開發(fā) 前端 分布式
雖然所有關(guān)系數(shù)據(jù)庫提供程序都支持事務(wù),但在調(diào)用事務(wù) API 時,可能會引發(fā)其他提供程序類型或不執(zhí)行任何操作。

 [[388003]]

本文轉(zhuǎn)載自微信公眾號「后端Q」,作者conan。轉(zhuǎn)載本文請聯(lián)系后端Q公眾號。  

控制事務(wù)

可以使用 DbContext.Database API 開始、提交和回滾事務(wù)。 以下示例顯示了在單個事務(wù)中執(zhí)行的兩個 SaveChanges 操作以及一個 LINQ 查詢:

  1. using var context = new BloggingContext(); 
  2. using var transaction = context.Database.BeginTransaction(); 
  3.  
  4. try 
  5.     context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" }); 
  6.     context.SaveChanges(); 
  7.  
  8.     context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/visualstudio" }); 
  9.     context.SaveChanges(); 
  10.  
  11.     var blogs = context.Blogs 
  12.         .OrderBy(b => b.Url) 
  13.         .ToList(); 
  14.  
  15.     // Commit transaction if all commands succeed, transaction will auto-rollback 
  16.     // when disposed if either commands fails 
  17.     transaction.Commit(); 
  18. catch (Exception) 
  19.     // TODO: Handle failure 

雖然所有關(guān)系數(shù)據(jù)庫提供程序都支持事務(wù),但在調(diào)用事務(wù) API 時,可能會引發(fā)其他提供程序類型或不執(zhí)行任何操作。

使用 System.Transactions

如果需要跨較大作用域進(jìn)行協(xié)調(diào),則可以使用環(huán)境事務(wù)。

  1. using (var scope = new TransactionScope( 
  2.     TransactionScopeOption.Required, 
  3.     new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted })) 
  4.     using var connection = new SqlConnection(connectionString); 
  5.     connection.Open(); 
  6.  
  7.     try 
  8.     { 
  9.         // Run raw ADO.NET command in the transaction 
  10.         var command = connection.CreateCommand(); 
  11.         command.CommandText = "DELETE FROM dbo.Blogs"
  12.         command.ExecuteNonQuery(); 
  13.  
  14.         // Run an EF Core command in the transaction 
  15.         var options = new DbContextOptionsBuilder<BloggingContext>() 
  16.             .UseSqlServer(connection
  17.             .Options; 
  18.  
  19.         using (var context = new BloggingContext(options)) 
  20.         { 
  21.             context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" }); 
  22.             context.SaveChanges(); 
  23.         } 
  24.  
  25.         // Commit transaction if all commands succeed, transaction will auto-rollback 
  26.         // when disposed if either commands fails 
  27.         scope.Complete(); 
  28.     } 
  29.     catch (Exception) 
  30.     { 
  31.         // TODO: Handle failure 
  32.     } 

還可以在顯式事務(wù)中登記。

  1. using (var transaction = new CommittableTransaction( 
  2.     new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted })) 
  3.     var connection = new SqlConnection(connectionString); 
  4.  
  5.     try 
  6.     { 
  7.         var options = new DbContextOptionsBuilder<BloggingContext>() 
  8.             .UseSqlServer(connection
  9.             .Options; 
  10.  
  11.         using (var context = new BloggingContext(options)) 
  12.         { 
  13.             context.Database.OpenConnection(); 
  14.             context.Database.EnlistTransaction(transaction); 
  15.  
  16.             // Run raw ADO.NET command in the transaction 
  17.             var command = connection.CreateCommand(); 
  18.             command.CommandText = "DELETE FROM dbo.Blogs"
  19.             command.ExecuteNonQuery(); 
  20.  
  21.             // Run an EF Core command in the transaction 
  22.             context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" }); 
  23.             context.SaveChanges(); 
  24.             context.Database.CloseConnection(); 
  25.         } 
  26.  
  27.         // Commit transaction if all commands succeed, transaction will auto-rollback 
  28.         // when disposed if either commands fails 
  29.         transaction.Commit(); 
  30.     } 
  31.     catch (Exception) 
  32.     { 
  33.         // TODO: Handle failure 
  34.     } 

System.Transactions 的限制

  1. EF Core 依賴數(shù)據(jù)庫提供程序以實現(xiàn)對 System.Transactions 的支持。 如果提供程序未實現(xiàn)對 System.Transactions 的支持,則可能會完全忽略對這些 API 的調(diào)用。 SqlClient 支持它。
  2. 自 .NET Core 2.1 起,System.Transactions 實現(xiàn)不包括對分布式事務(wù)的支持,因此不能使用 TransactionScope 或 CommittableTransaction 來跨多個資源管理器協(xié)調(diào)事務(wù)。

 

責(zé)任編輯:武曉燕 來源: 后端Q
相關(guān)推薦

2022-06-27 08:21:05

Seata分布式事務(wù)微服務(wù)

2022-06-21 08:27:22

Seata分布式事務(wù)

2017-07-26 15:08:05

大數(shù)據(jù)分布式事務(wù)

2010-03-02 13:36:23

WCF事務(wù)投票

2025-04-29 04:00:00

分布式事務(wù)事務(wù)消息

2009-06-19 15:28:31

JDBC分布式事務(wù)

2021-09-29 09:07:37

分布式架構(gòu)系統(tǒng)

2009-09-18 15:10:13

分布式事務(wù)LINQ TO SQL

2023-07-26 09:24:03

分布式事務(wù)分布式系統(tǒng)

2019-06-26 09:41:44

分布式事務(wù)微服務(wù)

2022-03-24 07:51:27

seata分布式事務(wù)Java

2019-10-10 09:16:34

Zookeeper架構(gòu)分布式

2010-04-22 15:11:14

2024-06-28 09:07:19

2020-04-28 12:18:08

Seata模式分布式

2024-12-09 09:35:00

2014-02-11 09:07:31

2018-10-28 17:54:00

分布式事務(wù)數(shù)據(jù)

2020-03-31 08:05:23

分布式開發(fā)技術(shù)

2023-12-26 08:59:52

分布式場景事務(wù)機(jī)制
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號