成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

 [[388003]]

本文轉載自微信公眾號「后端Q」,作者conan。轉載本文請聯系后端Q公眾號。  

控制事務

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

雖然所有關系數據庫提供程序都支持事務,但在調用事務 API 時,可能會引發其他提供程序類型或不執行任何操作。

使用 System.Transactions

如果需要跨較大作用域進行協調,則可以使用環境事務。

  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 依賴數據庫提供程序以實現對 System.Transactions 的支持。 如果提供程序未實現對 System.Transactions 的支持,則可能會完全忽略對這些 API 的調用。 SqlClient 支持它。
  2. 自 .NET Core 2.1 起,System.Transactions 實現不包括對分布式事務的支持,因此不能使用 TransactionScope 或 CommittableTransaction 來跨多個資源管理器協調事務。

 

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

2022-06-27 08:21:05

Seata分布式事務微服務

2017-07-26 15:08:05

大數據分布式事務

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

分布式架構系統

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架構分布式

2023-07-26 09:24:03

分布式事務分布式系統

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

分布式事務數據

2020-03-31 08:05:23

分布式開發技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 荷兰欧美一级毛片 | 欧美精品日韩精品国产精品 | 午夜在线小视频 | 久久福利 | 色综合一区 | 日一区二区 | 日韩a视频| 欧美亚洲综合久久 | 亚洲视频一区在线 | h视频免费观看 | aⅴ色国产 欧美 | 中文字幕在线观看第一页 | 91免费看片| 欧美黑人狂野猛交老妇 | 亚洲乱码国产乱码精品精98午夜 | 操久久 | 日日夜夜天天 | 黄色三级免费网站 | 久久久久久亚洲精品 | 国精产品一品二品国精在线观看 | 精品国产一区二区三区久久狼黑人 | 一级二级三级黄色 | 日韩一区中文字幕 | 亚洲国产精品成人久久久 | 岛国在线免费观看 | 亚洲精品视频在线看 | 欧美亚洲成人网 | 欧美成人在线影院 | 精品一区二区三区四区 | 日韩三级视频 | 性福视频在线观看 | 久草在线 | 日屁视频 | 欧美日韩亚 | 亚洲91| 亚洲天堂999 | 日本一区二区不卡 | 激情国产 | 99久久久无码国产精品 | 91美女在线| 成人精品久久日伦片大全免费 |