Asp.net中的事务方法

本文关键字:事务 方法 net Asp | 更新日期: 2023-09-27 18:06:21

我之前一直在Grails中工作,在Grails中,和Spring一样,服务方法默认是事务性的,如果我们愿意,我们可以通过注释来改变它,但现在我在ASP.net中工作,我想知道是否有类似的东西。或者我们必须在每个方法结束时显式地打开事务并关闭它。我使用实体框架…

Asp.net中的事务方法

这是一篇很好的关于EF中的事务的文章处理事务(EF6以后)

using System; 
using System.Collections.Generic; 
using System.Data.Entity; 
using System.Data.SqlClient; 
using System.Linq; 
using System.Transactions; 
namespace TransactionsExamples 
{ 
    class TransactionsExample 
    { 
        static void StartOwnTransactionWithinContext() 
        { 
            using (var context = new BloggingContext()) 
            { 
                using (var dbContextTransaction = context.Database.BeginTransaction()) 
                { 
                    try 
                    { 
                        context.Database.ExecuteSqlCommand( 
                            @"UPDATE Blogs SET Rating = 5" + 
                                " WHERE Name LIKE '%Entity Framework%'" 
                            ); 
                        var query = context.Posts.Where(p => p.Blog.Rating >= 5); 
                        foreach (var post in query) 
                        { 
                            post.Title += "[Cool Blog]"; 
                        } 
                        context.SaveChanges(); 
                        dbContextTransaction.Commit(); 
                    } 
                    catch (Exception) 
                    { 
                        dbContextTransaction.Rollback(); 
                    } 
                } 
            } 
        } 
    } 
}

使用EntityFramework,当您在DbContext实例上调用SaveChanges(或SaveChangesAsync)时,所有挂起的数据存储操作将在单个工作单元(事务)中发生。

如果您希望将工作拆分为多个事务,则每次要提交事务时都需要调用SaveChanges(或异步等效)。