本篇內容主要講解“如何理解EF Core事務提交”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何理解EF Core事務提交”吧!

創(chuàng)新互聯(lián)建站是網(wǎng)站建設技術企業(yè),為成都企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設,網(wǎng)站設計,網(wǎng)站制作,網(wǎng)站改版等技術服務。擁有十多年豐富建站經(jīng)驗和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。十多年品質,值得信賴!
可以使用 DbContext.Database API 開始、提交和回滾事務。 以下示例顯示了在單個事務中執(zhí)行的兩個 SaveChanges 操作以及一個 LINQ 查詢:
using var context = new BloggingContext(); using var transaction = context.Database.BeginTransaction(); try { context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" }); context.SaveChanges(); context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/visualstudio" }); context.SaveChanges(); var blogs = context.Blogs .OrderBy(b => b.Url) .ToList(); // Commit transaction if all commands succeed, transaction will auto-rollback // when disposed if either commands fails transaction.Commit(); } catch (Exception) { // TODO: Handle failure }雖然所有關系數(shù)據(jù)庫提供程序都支持事務,但在調用事務 API 時,可能會引發(fā)其他提供程序類型或不執(zhí)行任何操作。
如果需要跨較大作用域進行協(xié)調,則可以使用環(huán)境事務。
using (var scope = new TransactionScope( TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted })) { using var connection = new SqlConnection(connectionString); connection.Open(); try { // Run raw ADO.NET command in the transaction var command = connection.CreateCommand(); command.CommandText = "DELETE FROM dbo.Blogs"; command.ExecuteNonQuery(); // Run an EF Core command in the transaction var options = new DbContextOptionsBuilder<BloggingContext>() .UseSqlServer(connection) .Options; using (var context = new BloggingContext(options)) { context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" }); context.SaveChanges(); } // Commit transaction if all commands succeed, transaction will auto-rollback // when disposed if either commands fails scope.Complete(); } catch (Exception) { // TODO: Handle failure } }還可以在顯式事務中登記。
using (var transaction = new CommittableTransaction( new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted })) { var connection = new SqlConnection(connectionString); try { var options = new DbContextOptionsBuilder<BloggingContext>() .UseSqlServer(connection) .Options; using (var context = new BloggingContext(options)) { context.Database.OpenConnection(); context.Database.EnlistTransaction(transaction); // Run raw ADO.NET command in the transaction var command = connection.CreateCommand(); command.CommandText = "DELETE FROM dbo.Blogs"; command.ExecuteNonQuery(); // Run an EF Core command in the transaction context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" }); context.SaveChanges(); context.Database.CloseConnection(); } // Commit transaction if all commands succeed, transaction will auto-rollback // when disposed if either commands fails transaction.Commit(); } catch (Exception) { // TODO: Handle failure } }EF Core 依賴數(shù)據(jù)庫提供程序以實現(xiàn)對 System.Transactions 的支持。 如果提供程序未實現(xiàn)對 System.Transactions 的支持,則可能會完全忽略對這些 API 的調用。 SqlClient 支持它。
自 .NET Core 2.1 起,System.Transactions 實現(xiàn)不包括對分布式事務的支持,因此不能使用 TransactionScope 或 CommittableTransaction 來跨多個資源管理器協(xié)調事務。
到此,相信大家對“如何理解EF Core事務提交”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
分享題目:如何理解EFCore事務提交
URL地址:http://www.chinadenli.net/article22/peshjc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供電子商務、企業(yè)建站、用戶體驗、App開發(fā)、搜索引擎優(yōu)化、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)