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

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

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

 [[388003]]

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

控制事務(wù)

可以使用 DbContext.Database API 開(kāi)始、提交和回滾事務(wù)。 以下示例顯示了在單個(gè)事務(wù)中執(zhí)行的兩個(gè) SaveChanges 操作以及一個(gè) 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ù)庫(kù)提供程序都支持事務(wù),但在調(diào)用事務(wù) API 時(shí),可能會(huì)引發(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ù)庫(kù)提供程序以實(shí)現(xiàn)對(duì) System.Transactions 的支持。 如果提供程序未實(shí)現(xiàn)對(duì) System.Transactions 的支持,則可能會(huì)完全忽略對(duì)這些 API 的調(diào)用。 SqlClient 支持它。
  2. 自 .NET Core 2.1 起,System.Transactions 實(shí)現(xiàn)不包括對(duì)分布式事務(wù)的支持,因此不能使用 TransactionScope 或 CommittableTransaction 來(lái)跨多個(gè)資源管理器協(xié)調(diào)事務(wù)。

 

責(zé)任編輯:武曉燕 來(lái)源: 后端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ù)

2009-09-18 15:10:13

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

2021-09-29 09:07:37

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

2019-06-26 09:41:44

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

2025-05-15 08:05:00

2022-03-24 07:51:27

seata分布式事務(wù)Java

2023-07-26 09:24:03

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

2019-10-10 09:16:34

Zookeeper架構(gòu)分布式

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

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

2020-03-31 08:05:23

分布式開(kāi)發(fā)技術(shù)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 2021天天躁夜夜看 | 国产一区二区三区亚洲 | 久久高清国产视频 | 夜夜草导航 | 国产一区三区视频 | 不卡一区二区三区四区 | 欧美高清视频一区 | 999观看免费高清www | 色综合99| 亚洲欧美中文日韩在线v日本 | 九九综合 | 91视频网址 | 亚洲精品久久久 | 久久综合久久久 | 免费成人高清在线视频 | 天天看天天爽 | 欧美综合在线视频 | 久久精品久久久久久 | 精品视频导航 | 7777在线视频免费播放 | 一区二区国产精品 | 最新国产精品视频 | 日韩一区不卡 | 国产在线播放一区二区三区 | 毛片片| 91丨九色丨国产在线 | 精品欧美视频 | 日本欧美在线视频 | 色在线免费视频 | 国产伦精品一区二区三区高清 | 一区二区三区视频播放 | 欧美日本韩国一区二区 | 91国产精品 | 成人午夜精品 | 免费一区在线 | 亚洲电影一区二区三区 | 在线亚洲一区二区 | 久久久久久亚洲精品 | 亚洲一级毛片 | 99在线免费观看视频 | 在线播放国产一区二区三区 |