Explorar o código

IFreeSql增加拓展方法GetRepositoryBase返回自定义拓展仓库基础类

zhontai %!s(int64=3) %!d(string=hai) anos
pai
achega
c89b408a81

+ 3 - 3
Admin.Core.Repository/Base/DbHelper.cs

@@ -258,7 +258,7 @@ namespace Admin.Core.Repository
             System.Data.Common.DbTransaction tran,
             T[] data,
             DbConfig dbConfig = null
-        ) where T : class
+        ) where T : class, new()
         {
             var table = typeof(T).GetCustomAttributes(typeof(TableAttribute), false).FirstOrDefault() as TableAttribute;
             var tableName = table.Name;
@@ -277,7 +277,7 @@ namespace Admin.Core.Repository
                     return;
                 }
 
-                var repo = db.GetRepository<T>();
+                var repo = db.GetRepositoryBase<T>();
                 var insert = db.Insert<T>();
                 if (unitOfWork != null)
                 {
@@ -406,7 +406,7 @@ namespace Admin.Core.Repository
                 using (var uow = db.CreateUnitOfWork())
                 using (var tran = uow.GetOrBeginTransaction())
                 {
-                    var dualRepo = db.GetRepository<DualEntity>();
+                    var dualRepo = db.GetRepositoryBase<DualEntity>();
                     dualRepo.UnitOfWork = uow;
                     if (!await dualRepo.Select.AnyAsync())
                     {

+ 15 - 0
Admin.Core.Repository/Base/DefaultRepositoryBase.cs

@@ -0,0 +1,15 @@
+using System;
+using System.Linq.Expressions;
+
+namespace Admin.Core.Repository
+{
+    public class DefaultRepositoryBase<TEntity, TKey> : RepositoryBase<TEntity, TKey> where TEntity : class, new()
+    {
+        public DefaultRepositoryBase(IFreeSql fsql) : base(fsql) { }
+        public DefaultRepositoryBase(IFreeSql fsql, Expression<Func<TEntity, bool>> filter) : base(fsql, filter, null) { }
+        public DefaultRepositoryBase(IFreeSql fsql, MyUnitOfWorkManager muowManger) : base(muowManger?.Orm ?? fsql, null, null)
+        {
+            muowManger?.Binding(this);
+        }
+    }
+}

+ 37 - 0
Admin.Core.Repository/Base/FreeSqlRepositoryExtensions.cs

@@ -0,0 +1,37 @@
+using Admin.Core.Repository;
+using System;
+using System.Linq.Expressions;
+
+public static class FreeSqlDbContextExtensions
+{
+
+    /// <summary>
+    /// 返回默认仓库类
+    /// </summary>
+    /// <typeparam name="TEntity"></typeparam>
+    /// <typeparam name="TKey"></typeparam>
+    /// <param name="that"></param>
+    /// <param name="filter">数据过滤 + 验证</param>
+    /// <returns></returns>
+    public static IRepositoryBase<TEntity, TKey> GetRepositoryBase<TEntity, TKey>(this IFreeSql that, Expression<Func<TEntity, bool>> filter = null) where TEntity : class, new()
+    {
+        return new DefaultRepositoryBase<TEntity, TKey>(that, filter);
+    }
+
+    /// <summary>
+    /// 返回默认仓库类,适用联合主键的仓储类
+    /// </summary>
+    /// <typeparam name="TEntity"></typeparam>
+    /// <param name="that"></param>
+    /// <param name="filter">数据过滤 + 验证</param>
+    /// <returns></returns>
+    public static IRepositoryBase<TEntity, long> GetRepositoryBase<TEntity>(this IFreeSql that, Expression<Func<TEntity, bool>> filter = null) where TEntity : class, new()
+    {
+        return new DefaultRepositoryBase<TEntity, long>(that, filter);
+    }
+
+    public static IRepositoryBase<TEntity, long> GetRepositoryBase<TEntity>(this IFreeSql that, MyUnitOfWorkManager muowManger) where TEntity : class, new()
+    {
+        return new DefaultRepositoryBase<TEntity, long>(that, muowManger);
+    }
+}

+ 2 - 2
Admin.Core.Repository/Base/IdleBusExtesions.cs

@@ -93,7 +93,7 @@ namespace Admin.Core.Repository
                     var dbConfig = serviceProvider.GetRequiredService<DbConfig>();
                     //查询租户数据库信息
                     var masterDb = serviceProvider.GetRequiredService<IFreeSql>();
-                    var tenantRepository = masterDb.GetRepository<TenantEntity>();
+                    var tenantRepository = masterDb.GetRepositoryBase<TenantEntity>();
                     var tenant = tenantRepository.Select.DisableGlobalFilter("Tenant").WhereDynamic(tenantId).ToOne<CreateFreeSqlTenantDto>();
 
                     var timeSpan = tenant.IdleTime.HasValue && tenant.IdleTime.Value > 0 ? TimeSpan.FromMinutes(tenant.IdleTime.Value) : TimeSpan.MaxValue;
@@ -129,7 +129,7 @@ namespace Admin.Core.Repository
                     var dbConfig = serviceProvider.GetRequiredService<DbConfig>();
                     //查询租户数据库信息
                     var masterDb = serviceProvider.GetRequiredService<IFreeSql>();
-                    var tenantRepository = masterDb.GetRepository<TenantEntity>();
+                    var tenantRepository = masterDb.GetRepositoryBase<TenantEntity>();
                     var tenant = tenantRepository.Select.DisableGlobalFilter("Tenant").WhereDynamic(tenantId).ToOne<CreateFreeSqlTenantDto>();
 
                     var timeSpan = tenant.IdleTime.HasValue && tenant.IdleTime.Value > 0 ? TimeSpan.FromMinutes(tenant.IdleTime.Value) : TimeSpan.MaxValue;

+ 1 - 0
Admin.Core.Repository/Base/RepositoryBase.cs

@@ -13,6 +13,7 @@ namespace Admin.Core.Repository
         public RepositoryBase(IFreeSql freeSql) : base(freeSql, null, null)
         {
         }
+        public RepositoryBase(IFreeSql fsql, Expression<Func<TEntity, bool>> filter, Func<string, string> asTable = null) : base(fsql, filter, asTable) { }
 
         public virtual Task<TDto> GetAsync<TDto>(TKey id)
         {

+ 3 - 3
Admin.Core.Service/Admin/Permission/PermissionService.cs

@@ -292,7 +292,7 @@ namespace Admin.Core.Service.Admin.Permission
             if (_appConfig.Tenant && User.TenantType == TenantType.Tenant)
             {
                 var masterDb = ServiceProvider.GetRequiredService<IFreeSql>();
-                var tenantPermissionIds = await masterDb.GetRepository<TenantPermissionEntity>().Select.Where(d => d.TenantId == User.TenantId).ToListAsync(m => m.PermissionId);
+                var tenantPermissionIds = await masterDb.GetRepositoryBase<TenantPermissionEntity>().Select.Where(d => d.TenantId == User.TenantId).ToListAsync(m => m.PermissionId);
                 insertPermissionIds = insertPermissionIds.Where(d => tenantPermissionIds.Contains(d));
             }
 
@@ -335,7 +335,7 @@ namespace Admin.Core.Service.Admin.Permission
             {
                 await _tenantPermissionRepository.DeleteAsync(m => m.TenantId == input.TenantId && deleteIds.Contains(m.PermissionId));
                 //删除租户下关联的角色权限
-                await tenantDb.GetRepository<RolePermissionEntity>().DeleteAsync(a => deleteIds.Contains(a.PermissionId));
+                await tenantDb.GetRepositoryBase<RolePermissionEntity>().DeleteAsync(a => deleteIds.Contains(a.PermissionId));
             }
 
             //批量插入租户权限
@@ -355,7 +355,7 @@ namespace Admin.Core.Service.Admin.Permission
             }
 
             //清除租户下所有用户权限缓存
-            var userIds = await tenantDb.GetRepository<UserEntity>().Select.Where(a => a.TenantId == input.TenantId).ToListAsync(a => a.Id);
+            var userIds = await tenantDb.GetRepositoryBase<UserEntity>().Select.Where(a => a.TenantId == input.TenantId).ToListAsync(a => a.Id);
             if(userIds.Any())
             {
                 foreach (var userId in userIds)

+ 22 - 18
Admin.Core.Tests/Controller/BaseControllerTest.cs

@@ -21,6 +21,7 @@ namespace Admin.Core.Tests.Controller
         private readonly ICache _cache;
         private readonly IAuthService _authService;
         private readonly AppConfig _appConfig;
+        private static JToken _token = null;
 
         protected BaseControllerTest()
         {
@@ -39,28 +40,31 @@ namespace Admin.Core.Tests.Controller
 
         public async Task Login(AuthLoginInput input = null)
         {
-            if (input == null && _appConfig.VarifyCode.Enable)
+            if(_token == null)
             {
-                var res = await _authService.GetVerifyCodeAsync("") as IResponseOutput<AuthGetVerifyCodeOutput>;
-                var verifyCodeKey = string.Format(CacheKey.VerifyCodeKey, res.Data.Key);
-                var verifyCode = await _cache.GetAsync(verifyCodeKey);
-                input = new AuthLoginInput()
+                if (input == null && _appConfig.VarifyCode.Enable)
                 {
-                    UserName = "admin",
-                    Password = "111111",
-                    VerifyCodeKey = res.Data.Key,
-                    VerifyCode = verifyCode
-                };
-            }
-
-            //Client.DefaultRequestHeaders.Connection.Add("keep-alive");
-            Client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36");
+                    var res = await _authService.GetVerifyCodeAsync("") as IResponseOutput<AuthGetVerifyCodeOutput>;
+                    var verifyCodeKey = string.Format(CacheKey.VerifyCodeKey, res.Data.Key);
+                    var verifyCode = await _cache.GetAsync(verifyCodeKey);
+                    input = new AuthLoginInput()
+                    {
+                        UserName = "admin",
+                        Password = "111111",
+                        VerifyCodeKey = res.Data.Key,
+                        VerifyCode = verifyCode
+                    };
+                }
 
-            var result = await Client.PostAsync($"/api/admin/auth/login", GetHttpContent(input));
-            var content = await result.Content.ReadAsStringAsync();
-            var jObject = JsonConvert.DeserializeObject<JObject>(content);
+                //Client.DefaultRequestHeaders.Connection.Add("keep-alive");
+                Client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36");
 
-            Client.DefaultRequestHeaders.Add("Authorization", $"Bearer {jObject["data"]["token"]}");
+                var result = await Client.PostAsync($"/api/admin/auth/login", GetHttpContent(input));
+                var content = await result.Content.ReadAsStringAsync();
+                var jObject = JsonConvert.DeserializeObject<JObject>(content);
+                _token = jObject["data"]["token"];
+            }
+            Client.DefaultRequestHeaders.Add("Authorization", $"Bearer {_token}");
         }
 
         public string ToParams(object source)