偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

深入分析EF Core事務提交,分布式事務

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

 [[388003]]

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

控制事務

可以使用 DbContext.Database API 開始、提交和回滾事務。 以下示例顯示了在單個事務中執(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 

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

使用 System.Transactions

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

  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.     } 

還可以在顯式事務中登記。

  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)不包括對分布式事務的支持,因此不能使用 TransactionScope 或 CommittableTransaction 來跨多個資源管理器協(xié)調(diào)事務。

 

責任編輯:武曉燕 來源: 后端Q
相關推薦

2022-06-27 08:21:05

Seata分布式事務微服務

2017-07-26 15:08:05

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

2022-06-21 08:27:22

Seata分布式事務

2010-03-02 13:36:23

WCF事務投票

2025-04-29 04:00:00

分布式事務事務消息

2009-06-19 15:28:31

JDBC分布式事務

2009-09-18 15:10:13

分布式事務LINQ TO SQL

2021-09-29 09:07:37

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

2019-06-26 09:41:44

分布式事務微服務

2022-03-24 07:51:27

seata分布式事務Java

2025-05-15 08:05:00

2019-10-10 09:16:34

Zookeeper架構(gòu)分布式

2023-07-26 09:24:03

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

2010-04-22 15:11:14

2020-04-28 12:18:08

Seata模式分布式

2024-06-28 09:07:19

2024-12-09 09:35:00

2014-02-11 09:07:31

2018-10-28 17:54:00

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

2020-03-31 08:05:23

分布式開發(fā)技術
點贊
收藏

51CTO技術棧公眾號