asp.net core TransactionScope 提交或回滚事务

在 efcore 中如果 有多次 保存,如果 没有 TransactionScope。 成功的保存 就会真正的保存在数据库中,业务 可能是 如果 在代码段中 仅有一次 错误,则全部 回滚。 那么就要 用上 TransactionScope 

看 如下 代码

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.Transactions;

namespace aspnetcore011.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class Test2Controller : ControllerBase
    {
        private MyDBcontex db;

        public Test2Controller(MyDBcontex db)
        {
            this.db = db;
        }

        [HttpGet]
        public string GetStr()
        {
            //TransactionScopeAsyncFlowOption.Enabled参数才能 支持同步和异步
            using (TransactionScope ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                //下面 这个没有问题 如果没有TransactionScope 下面没问题的会保存到数据库
                this.db.Books.Add(new Book { Title = ".netcore" });
                db.SaveChanges();
                //假设下面 出错。 TransactionScope会回滚 上面保存成功的。
                db.Persons.Add(new Person { Name = "张三" });
                db.SaveChanges();
                //全部成功 才 提交事务
                ts.Complete();
            }
            return "ok";
        }
    }
}

使用的方法 就是 需要 using(TransactionScope) {}  这 using的代码块中 如果 有任何 错误,全部就会回滚  如果没有任何 错误 ts.Complete(); 会提交事务

但 TransactionScope  不局限在 efcore中 如 文件读写 等操作。

你可能感兴趣的:(.NET,c#,.net)