diff --git a/Yi.Framework.Net6/src/framework/Yi.Framework.Core.Sqlsugar/YiFrameworkCoreSqlsugarModule.cs b/Yi.Framework.Net6/src/framework/Yi.Framework.Core.Sqlsugar/YiFrameworkCoreSqlsugarModule.cs index f8ac584f..d7c12efd 100644 --- a/Yi.Framework.Net6/src/framework/Yi.Framework.Core.Sqlsugar/YiFrameworkCoreSqlsugarModule.cs +++ b/Yi.Framework.Net6/src/framework/Yi.Framework.Core.Sqlsugar/YiFrameworkCoreSqlsugarModule.cs @@ -25,10 +25,11 @@ namespace Yi.Framework.Core.Sqlsugar services.AddSingleton(); + //这里替换过滤器实现 services.Configure(Appsettings.appConfiguration("DbConnOptions")); services.AddSqlsugarServer(); - + } } } \ No newline at end of file diff --git a/Yi.Framework.Net6/src/framework/Yi.Framework.Data/Class1.cs b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/Class1.cs deleted file mode 100644 index dc095265..00000000 --- a/Yi.Framework.Net6/src/framework/Yi.Framework.Data/Class1.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Yi.Framework.Data -{ - public class Class1 - { - - } -} \ No newline at end of file diff --git a/Yi.Framework.Net6/src/framework/Yi.Framework.Data/DataFilter.cs b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/DataFilter.cs deleted file mode 100644 index bc4aaf46..00000000 --- a/Yi.Framework.Net6/src/framework/Yi.Framework.Data/DataFilter.cs +++ /dev/null @@ -1,106 +0,0 @@ -//using System; -//using System.Collections.Concurrent; -//using System.Collections.Generic; -//using System.Linq; -//using System.Text; -//using System.Threading.Tasks; - -//namespace Yi.Framework.Data -//{ -// public class DataFilter : IDataFilter -// { -// private readonly ConcurrentDictionary _filters; - -// private readonly IServiceProvider _serviceProvider; - -// public DataFilter(IServiceProvider serviceProvider) -// { -// _serviceProvider = serviceProvider; -// _filters = new ConcurrentDictionary(); -// } - -// public IDisposable Enable() -// where TFilter : class -// { -// return GetFilter().Enable(); -// } - -// public IDisposable Disable() -// where TFilter : class -// { -// return GetFilter().Disable(); -// } - -// public bool IsEnabled() -// where TFilter : class -// { -// return GetFilter().IsEnabled; -// } - -// private IDataFilter GetFilter() -// where TFilter : class -// { -// return _filters.GetOrAdd( -// typeof(TFilter), -// valueFactory: (k) => _serviceProvider.GetRequiredService>() -// ) as IDataFilter; -// } -// } - -// public class DataFilter : IDataFilter -// where TFilter : class -// { -// public bool IsEnabled -// { -// get -// { -// EnsureInitialized(); -// return _filter.Value.IsEnabled; -// } -// } - -// private readonly AbpDataFilterOptions _options; - -// private readonly AsyncLocal _filter; - -// public DataFilter(IOptions options) -// { -// _options = options.Value; -// _filter = new AsyncLocal(); -// } - -// public IDisposable Enable() -// { -// if (IsEnabled) -// { -// return NullDisposable.Instance; -// } - -// _filter.Value.IsEnabled = true; - -// return new DisposeAction(() => Disable()); -// } - -// public IDisposable Disable() -// { -// if (!IsEnabled) -// { -// return NullDisposable.Instance; -// } - -// _filter.Value.IsEnabled = false; - -// return new DisposeAction(() => Enable()); -// } - -// private void EnsureInitialized() -// { -// if (_filter.Value != null) -// { -// return; -// } - -// _filter.Value = _options.DefaultStates.GetOrDefault(typeof(TFilter))?.Clone() ?? new DataFilterState(true); -// } -// } -//} diff --git a/Yi.Framework.Net6/src/framework/Yi.Framework.Data/DataSeeds/AbstractDataSeed.cs b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/DataSeeds/AbstractDataSeed.cs new file mode 100644 index 00000000..71eb8efc --- /dev/null +++ b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/DataSeeds/AbstractDataSeed.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Ddd.Repositories; + +namespace Yi.Framework.Data.DataSeeds +{ + public abstract class AbstractDataSeed : IDataSeed + { + private readonly IRepository _repository; + public AbstractDataSeed(IRepository repository) + { + _repository = repository; + } + + /// + /// 简单种子数据,重写该方法即可 + /// + /// + public abstract List GetSeedData(); + + + /// + /// 复杂数据,重写该方法即可 + /// + /// + public async virtual Task DataHandlerAsync() + { + return await _repository.InsertRangeAsync(GetSeedData()); + } + + /// + /// 这个用来处理判断是否数据库还存在数据 + /// + /// + public virtual bool IsInvoker() + { + return true; + } + + /// + /// 完全自定义数据,处理该方法即可 + /// + /// + public async virtual Task InvokerAsync() + { + bool res = true; + if (IsInvoker()) + { + return await DataHandlerAsync(); + } + return res; + } + } +} diff --git a/Yi.Framework.Net6/src/framework/Yi.Framework.Data/DataSeeds/IDataSeed.cs b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/DataSeeds/IDataSeed.cs new file mode 100644 index 00000000..316d9904 --- /dev/null +++ b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/DataSeeds/IDataSeed.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.Framework.Data.DataSeeds +{ + public interface IDataSeed + { + bool IsInvoker(); + } +} diff --git a/Yi.Framework.Net6/src/framework/Yi.Framework.Data/Entities/IMultiTenant.cs b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/Entities/IMultiTenant.cs new file mode 100644 index 00000000..e8bc3266 --- /dev/null +++ b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/Entities/IMultiTenant.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.Framework.Data.Entities +{ + public interface IMultiTenant + { + public Guid TenantId { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/framework/Yi.Framework.Data/Entities/ISoftDelete.cs b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/Entities/ISoftDelete.cs new file mode 100644 index 00000000..cbbc5277 --- /dev/null +++ b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/Entities/ISoftDelete.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.Framework.Data.Entities +{ + public interface ISoftDelete + { + public bool IsDeleted { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/framework/Yi.Framework.Data/Filters/DefaultDataFilter.cs b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/Filters/DefaultDataFilter.cs new file mode 100644 index 00000000..eaffb534 --- /dev/null +++ b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/Filters/DefaultDataFilter.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.Framework.Data.Filters +{ + public class DefaultDataFilter : IDataFilter + { + private readonly IServiceProvider _serviceProvider; + + public DefaultDataFilter(IServiceProvider serviceProvider) + { + _serviceProvider = serviceProvider; + } + + + + public IDisposable Disable() where TFilter : class + { + return null; + } + + public IDisposable Enable() where TFilter : class + { + return null; + } + + public bool IsEnabled() where TFilter : class + { + return false; + } + + public void RemoveFilter() where TFilter : class + { + } + public void RemoveAndBackup() where TFilter : class + { + } + + public void AddFilter(Expression> expression) where TFilter : class + { + } + } +} diff --git a/Yi.Framework.Net6/src/framework/Yi.Framework.Data/Filters/IDataFilter.cs b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/Filters/IDataFilter.cs new file mode 100644 index 00000000..7a0bc8de --- /dev/null +++ b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/Filters/IDataFilter.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.Framework.Data.Filters +{ + public interface IDataFilter + { + IDisposable Enable() where TFilter :class; + + IDisposable Disable() where TFilter : class; + + bool IsEnabled() where TFilter : class; + + void AddFilter(Expression> expression) where TFilter : class; + + void RemoveFilter() where TFilter : class; + } + +} diff --git a/Yi.Framework.Net6/src/framework/Yi.Framework.Data/IDataFilter.cs b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/IDataFilter.cs deleted file mode 100644 index 61a4f92a..00000000 --- a/Yi.Framework.Net6/src/framework/Yi.Framework.Data/IDataFilter.cs +++ /dev/null @@ -1,31 +0,0 @@ -//using System; -//using System.Collections.Generic; -//using System.Linq; -//using System.Text; -//using System.Threading.Tasks; - -//namespace Yi.Framework.Data -//{ -// public interface IDataFilter -// where TFilter : class -// { -// IDisposable Enable(); - -// IDisposable Disable(); - -// bool IsEnabled { get; } -// } - -// public interface IDataFilter -// { -// IDisposable Enable() -// where TFilter : class; - -// IDisposable Disable() -// where TFilter : class; - -// bool IsEnabled() -// where TFilter : class; -// } - -//} diff --git a/Yi.Framework.Net6/src/framework/Yi.Framework.Data/YiFrameworkDataModule.cs b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/YiFrameworkDataModule.cs new file mode 100644 index 00000000..e48fa9b0 --- /dev/null +++ b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/YiFrameworkDataModule.cs @@ -0,0 +1,31 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using StartupModules; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Data.Entities; +using Yi.Framework.Data.Filters; + +namespace Yi.Framework.Data +{ + public class YiFrameworkDataModule : IStartupModule + { + public void Configure(IApplicationBuilder app, ConfigureMiddlewareContext context) + { + var dataFilter = app.ApplicationServices.GetRequiredService(); + //内置多租户与软删除过滤 + dataFilter.AddFilter(u => u.IsDeleted == false); + + //租户id从租户管理中获取 + dataFilter.AddFilter(u => u.TenantId == Guid.Empty); + } + + public void ConfigureServices(IServiceCollection services, ConfigureServicesContext context) + { + services.AddTransient(); + } + } +}