From ef5b628b31c3612dd184e309cf11d0b5f4b5696b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=A9=99=E5=AD=90?= <454313500@qq.com>
Date: Sat, 15 Apr 2023 12:25:47 +0800
Subject: [PATCH] =?UTF-8?q?feat:=E5=AE=8C=E6=88=90=E5=86=85=E9=83=A8?=
=?UTF-8?q?=E6=A0=B8=E5=BF=83=E6=A8=A1=E5=9D=97=E6=9B=BF=E6=8D=A2=E6=94=B9?=
=?UTF-8?q?=E9=80=A0=E6=88=90furion?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Sqlsugar/Uow/SqlsugarUnitOfWork.cs | 82 ++++++++++++-------
.../Sqlsugar/Uow/SqlsugarUnitOfWorkManager.cs | 38 ---------
.../Yi.Framework.Infrastructure/Startup.cs | 3 +
.../Uow/DefaultUnitOfWork.cs | 26 ------
.../Uow/DefaultUnitOfWorkManager.cs | 10 ---
.../Uow/IUnitOfWork.cs | 14 ----
.../Uow/IUnitOfWorkManager.cs | 8 --
.../System/Services/Impl/AccountService.cs | 9 +-
.../System/Services/Impl/RoleService.cs | 3 +-
.../System/Services/Impl/UserService.cs | 3 +-
10 files changed, 60 insertions(+), 136 deletions(-)
delete mode 100644 Yi.Furion.Rbac/Yi.Framework.Infrastructure/Sqlsugar/Uow/SqlsugarUnitOfWorkManager.cs
delete mode 100644 Yi.Furion.Rbac/Yi.Framework.Infrastructure/Uow/DefaultUnitOfWork.cs
delete mode 100644 Yi.Furion.Rbac/Yi.Framework.Infrastructure/Uow/DefaultUnitOfWorkManager.cs
delete mode 100644 Yi.Furion.Rbac/Yi.Framework.Infrastructure/Uow/IUnitOfWork.cs
delete mode 100644 Yi.Furion.Rbac/Yi.Framework.Infrastructure/Uow/IUnitOfWorkManager.cs
diff --git a/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Sqlsugar/Uow/SqlsugarUnitOfWork.cs b/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Sqlsugar/Uow/SqlsugarUnitOfWork.cs
index 7c1ca7d7..fa6bbb3f 100644
--- a/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Sqlsugar/Uow/SqlsugarUnitOfWork.cs
+++ b/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Sqlsugar/Uow/SqlsugarUnitOfWork.cs
@@ -1,51 +1,71 @@
using Furion;
+using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
+using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.DependencyInjection;
using SqlSugar;
using Yi.Framework.Infrastructure.Ddd.Repositories;
-using Yi.Framework.Infrastructure.Uow;
namespace Yi.Framework.Infrastructure.Sqlsugar.Uow
{
- public class SqlsugarUnitOfWork : IUnitOfWork, ISingleton
+ public class SqlsugarUnitOfWork : IUnitOfWork
{
- public ISqlSugarClient Db { get; set; }
- public ITenant Tenant { get; set; }
- public bool IsTran { get; set; }
- public bool IsCommit { get; set; }
- public bool IsClose { get; set; }
+ //
+ /// SqlSugar 对象
+ ///
+ private readonly ISqlSugarClient _sqlSugarClient;
- public void Dispose()
+ ///
+ /// 构造函数
+ ///
+ ///
+ public SqlsugarUnitOfWork(ISqlSugarClient sqlSugarClient)
{
-
- if (IsTran && IsCommit == false)
- {
- Tenant.RollbackTran();
- }
- if (Db.Ado.Transaction == null && IsClose == false)
- {
- Db.Close();
- }
+ _sqlSugarClient = sqlSugarClient;
}
- public bool Commit()
+ ///
+ /// 开启工作单元处理
+ ///
+ ///
+ ///
+ ///
+ public void BeginTransaction(FilterContext context, UnitOfWorkAttribute unitOfWork)
{
- if (IsTran && IsCommit == false)
- {
- Tenant.CommitTran();
- IsCommit = true;
- }
- if (Db.Ado.Transaction == null && IsClose == false)
- {
- Db.Close();
- IsClose = true;
- }
- return IsCommit;
+ _sqlSugarClient.AsTenant().BeginTran();
}
- public IRepository GetRepository()
+ ///
+ /// 提交工作单元处理
+ ///
+ ///
+ ///
+ ///
+ public void CommitTransaction(FilterContext resultContext, UnitOfWorkAttribute unitOfWork)
{
- return App.GetRequiredService>();
+ _sqlSugarClient.AsTenant().CommitTran();
+ }
+
+ ///
+ /// 回滚工作单元处理
+ ///
+ ///
+ ///
+ ///
+ public void RollbackTransaction(FilterContext resultContext, UnitOfWorkAttribute unitOfWork)
+ {
+ _sqlSugarClient.AsTenant().RollbackTran();
+ }
+
+ ///
+ /// 执行完毕(无论成功失败)
+ ///
+ ///
+ ///
+ ///
+ public void OnCompleted(FilterContext context, FilterContext resultContext)
+ {
+ _sqlSugarClient.Dispose();
}
}
}
diff --git a/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Sqlsugar/Uow/SqlsugarUnitOfWorkManager.cs b/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Sqlsugar/Uow/SqlsugarUnitOfWorkManager.cs
deleted file mode 100644
index f4dc75a7..00000000
--- a/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Sqlsugar/Uow/SqlsugarUnitOfWorkManager.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using Furion.DependencyInjection;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Yi.Framework.Infrastructure.Uow;
-
-namespace Yi.Framework.Infrastructure.Sqlsugar.Uow
-{
- ///
- /// 此部分为sqlsugr的魔改版本
- ///
- internal class SqlsugarUnitOfWorkManager : IUnitOfWorkManager,ISingleton
- {
- public SqlsugarUnitOfWorkManager(ISqlSugarClient db)
- {
- Db = db;
- }
- public ISqlSugarClient Db { get; set; }
- public IUnitOfWork CreateContext(bool isTran = true)
- {
- SqlsugarUnitOfWork uow = new SqlsugarUnitOfWork();
- return CreateContext(isTran, uow);
- }
- private IUnitOfWork CreateContext(bool isTran, SqlsugarUnitOfWork sugarUnitOf)
- {
- sugarUnitOf.Db = Db;
- sugarUnitOf.Tenant = Db.AsTenant();
- sugarUnitOf.IsTran = isTran;
- Db.Open();
- if (isTran)
- Db.AsTenant().BeginTran();
- return sugarUnitOf;
- }
- }
-}
diff --git a/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Startup.cs b/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Startup.cs
index f75e0f45..2d1ec8de 100644
--- a/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Startup.cs
+++ b/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Startup.cs
@@ -5,6 +5,7 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Yi.Framework.Infrastructure.AspNetCore;
using Yi.Framework.Infrastructure.Sqlsugar;
+using Yi.Framework.Infrastructure.Sqlsugar.Uow;
namespace Yi.Framework.Infrastructure;
@@ -17,6 +18,8 @@ public class Startup : AppStartup
services.Configure(App.Configuration.GetSection("DbConnOptions"));
services.AddDbSqlsugarContextServer();
+
+ services.AddUnitOfWork();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
diff --git a/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Uow/DefaultUnitOfWork.cs b/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Uow/DefaultUnitOfWork.cs
deleted file mode 100644
index fea60739..00000000
--- a/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Uow/DefaultUnitOfWork.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using Yi.Framework.Infrastructure.Ddd.Repositories;
-
-namespace Yi.Framework.Infrastructure.Uow
-{
- internal class DefaultUnitOfWork : IUnitOfWork
- {
- public DefaultUnitOfWork() { }
- public bool IsTran { get; set; }
- public bool IsCommit { get; set; }
- public bool IsClose { get; set; }
-
- public bool Commit()
- {
- return true;
- }
-
- public void Dispose()
- {
- }
-
- public IRepository GetRepository()
- {
- throw new NotImplementedException();
- }
- }
-}
diff --git a/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Uow/DefaultUnitOfWorkManager.cs b/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Uow/DefaultUnitOfWorkManager.cs
deleted file mode 100644
index 3c84aa5a..00000000
--- a/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Uow/DefaultUnitOfWorkManager.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-namespace Yi.Framework.Infrastructure.Uow
-{
- internal class DefaultUnitOfWorkManager : IUnitOfWorkManager
- {
- public IUnitOfWork CreateContext(bool isTran = true)
- {
- return new DefaultUnitOfWork();
- }
- }
-}
diff --git a/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Uow/IUnitOfWork.cs b/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Uow/IUnitOfWork.cs
deleted file mode 100644
index b1e5e7b3..00000000
--- a/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Uow/IUnitOfWork.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using Yi.Framework.Infrastructure.Ddd.Repositories;
-
-namespace Yi.Framework.Infrastructure.Uow
-{
- public interface IUnitOfWork : IDisposable
- {
- bool IsTran { get; set; }
- bool IsCommit { get; set; }
- bool IsClose { get; set; }
-
- IRepository GetRepository();
- bool Commit();
- }
-}
diff --git a/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Uow/IUnitOfWorkManager.cs b/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Uow/IUnitOfWorkManager.cs
deleted file mode 100644
index 25a53c64..00000000
--- a/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Uow/IUnitOfWorkManager.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Yi.Framework.Infrastructure.Uow
-{
- public interface IUnitOfWorkManager
- {
- IUnitOfWork CreateContext(bool isTran = true);
- }
-
-}
\ No newline at end of file
diff --git a/Yi.Furion.Rbac/Yi.Furion.Rbac.Application/System/Services/Impl/AccountService.cs b/Yi.Furion.Rbac/Yi.Furion.Rbac.Application/System/Services/Impl/AccountService.cs
index 014d80c4..d7d89ba1 100644
--- a/Yi.Furion.Rbac/Yi.Furion.Rbac.Application/System/Services/Impl/AccountService.cs
+++ b/Yi.Furion.Rbac/Yi.Furion.Rbac.Application/System/Services/Impl/AccountService.cs
@@ -7,7 +7,6 @@ using Yi.Framework.Infrastructure.CurrentUsers;
using Yi.Framework.Infrastructure.Ddd.Repositories;
using Yi.Framework.Infrastructure.Ddd.Services;
using Yi.Framework.Infrastructure.Exceptions;
-using Yi.Framework.Infrastructure.Uow;
using Yi.Framework.Module.ImageSharp.HeiCaptcha;
using Yi.Framework.Module.Sms.Aliyun;
using Yi.Furion.Rbac.Application.System.Domain;
@@ -53,7 +52,6 @@ namespace Yi.Furion.Rbac.Application.System.Services.Impl
private UserManager _userManager { get; set; }
- private IUnitOfWorkManager _unitOfWorkManager { get; set; }
private IRepository _roleRepository { get; set; }
@@ -222,6 +220,7 @@ namespace Yi.Furion.Rbac.Application.System.Services.Impl
///
///
[AllowAnonymous]
+ [UnitOfWork]
public async Task