lith 2 жил өмнө
parent
commit
04c8db1a62
32 өөрчлөгдсөн 662 нэмэгдсэн , 213 устгасан
  1. 8 2
      Sqler.sln
  2. 10 10
      Sqler/Data/sqler.json
  3. 21 48
      Sqler/Module/AutoTemp/Controllers/AutoTempController.cs
  4. 1 1
      Sqler/Module/Sqler/Controllers/DataEditor/DataEditorController.cs
  5. 7 5
      Sqler/Module/Sqler/Logical/DataEditor/ConfigRepository.cs
  6. 23 18
      Sqler/Module/Sqler/Logical/DataEditor/DataEditorHelp.cs
  7. 1 1
      Sqler/Module/Sqler/Logical/DataEditor/DataProvider/DbSchemaDataProvider.cs
  8. 1 1
      Sqler/Module/Sqler/Logical/SqlBackup/MySqlBackup/ConfigRepository.cs
  9. 1 1
      Sqler/Module/Sqler/Logical/SqlBackup/SqlServerBackup/ConfigRepository.cs
  10. 1 1
      Sqler/Module/Sqler/Logical/SqlRun/ConfigRepository.cs
  11. 1 1
      Sqler/Module/Sqler/Logical/SqlVersion/ConfigRepository.cs
  12. 1 2
      Sqler/Module/Sqler/Logical/SqlVersion/ModuleRepository.cs
  13. 6 4
      Sqler/Module/Sqler/Logical/SqlVersion/SqlCodeRepository.cs
  14. 14 14
      Sqler/Module/Sqler/Logical/SqlVersion/SqlVersionHelp.cs
  15. 4 4
      Sqler/Module/Sqler/Logical/SqlerHelp.cs
  16. 17 7
      Sqler/Program.cs
  17. 10 5
      Sqler/Sqler.csproj
  18. 5 3
      Sqler/wwwroot/autoTemp/AutoTemp.txt
  19. 0 3
      Sqler/wwwroot/autoTemp/Scripts/infoGet/readme.md
  20. 0 0
      Sqler/wwwroot/autoTemp/infoGet.txt
  21. 0 3
      Sqler/wwwroot/autoTemp/readme.md
  22. 41 7
      Vit.AutoTemp/AutoTempHelp.cs
  23. 193 0
      Vit.AutoTemp/Controllers/AutoTempController.cs
  24. 197 0
      Vit.AutoTemp/DataProvider/Ef/EfDataProvider_DbSet.cs
  25. 47 53
      Vit.AutoTemp/DataProvider/Ef/EfDataProvider_IQueryable.cs
  26. 5 3
      Vit.AutoTemp/DataProvider/IDataProvider.cs
  27. 2 2
      Vit.AutoTemp/Demo/DemoDataProvider.cs
  28. 2 2
      Vit.AutoTemp/Demo/DemoRepository.cs
  29. 3 6
      Vit.AutoTemp/Repository/Extensions/IRepositoryExtensions.cs
  30. 2 1
      Vit.AutoTemp/Repository/IRepository.cs
  31. 8 5
      Vit.AutoTemp/Repository/RespositoryDataProvider.cs
  32. 30 0
      Vit.AutoTemp/Vit.AutoTemp.csproj

+ 8 - 2
Sqler.sln

@@ -1,10 +1,12 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.29503.13
+# Visual Studio Version 17
+VisualStudioVersion = 17.1.32113.165
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sqler", "Sqler\Sqler.csproj", "{15FA4B65-9F9E-41A9-A41F-BA5E4160D05A}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vit.AutoTemp", "Vit.AutoTemp\Vit.AutoTemp.csproj", "{537F663E-B0EC-4C9B-9E11-AD83317F727C}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -15,6 +17,10 @@ Global
 		{15FA4B65-9F9E-41A9-A41F-BA5E4160D05A}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{15FA4B65-9F9E-41A9-A41F-BA5E4160D05A}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{15FA4B65-9F9E-41A9-A41F-BA5E4160D05A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{537F663E-B0EC-4C9B-9E11-AD83317F727C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{537F663E-B0EC-4C9B-9E11-AD83317F727C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{537F663E-B0EC-4C9B-9E11-AD83317F727C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{537F663E-B0EC-4C9B-9E11-AD83317F727C}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 10 - 10
Sqler/Data/sqler.json

@@ -3,9 +3,9 @@
   "SqlRun": {
 
     "Config": {
-      /* 数据库类型,可为  mysql mssql sqlite */
+      /* 鏁版嵁搴撶被鍨嬶紝鍙�负  mysql mssql sqlite */
       "type": "sqlite",
-      /* 连接字符串 */
+      /* 杩炴帴瀛楃�涓� */
       "ConnectionString": "data source=Data\\db.sqlite"
     }
   },
@@ -17,22 +17,22 @@
 
     "SqlServerBackup": {
 
-      /* 连接字符串 */
+      /* 杩炴帴瀛楃�涓� */
       "ConnectionString": "Data Source=.;Database=Db_Dev;UID=sa;PWD=123456;",
 
-      /* 备份文件所在文件夹的路径,若不指定则为当前路径下的"Data/SqlServerBackup"文件夹 */
+      /* 澶囦唤鏂囦欢鎵€鍦ㄦ枃浠跺す鐨勮矾寰�,鑻ヤ笉鎸囧畾鍒欎负褰撳墠璺�緞涓嬬殑"Data/SqlServerBackup"鏂囦欢澶� */
       "BackupPath": "",
 
-      /* mdf数据库文件所在文件夹的路径,若不指定则为sqlserver系统路径 */
+      /* mdf鏁版嵁搴撴枃浠舵墍鍦ㄦ枃浠跺す鐨勮矾寰�,鑻ヤ笉鎸囧畾鍒欎负sqlserver绯荤粺璺�緞 */
       "MdfPath": ""
     },
 
     "MySqlBackup": {
 
-      /* 连接字符串 */
+      /* 杩炴帴瀛楃�涓� */
       "ConnectionString": "Data Source=.;Port=3306;Database=Db_Dev;SslMode=none;User Id=root;Password=123456;CharSet=utf8;",
 
-      /* 备份文件所在文件夹的路径,若不指定则为当前路径下的"Data/MySqlBackup"文件夹 */
+      /* 澶囦唤鏂囦欢鎵€鍦ㄦ枃浠跺す鐨勮矾寰�,鑻ヤ笉鎸囧畾鍒欎负褰撳墠璺�緞涓嬬殑"Data/MySqlBackup"鏂囦欢澶� */
       "BackupPath": ""
     }
 
@@ -46,12 +46,12 @@
   "SqlVersion": {
 
     "Config": {
-      /* 数据库类型,可为  mysql mssql sqlite */
+      /* 鏁版嵁搴撶被鍨嬶紝鍙�负  mysql mssql sqlite */
       "type": "sqlite",
-      /*连接字符串 */
+      /*杩炴帴瀛楃�涓� */
       "ConnectionString": "data source=Data\\db.sqlite",
 
-      /* 是否可修改sql(若为false则不可修改) */
+      /* 鏄�惁鍙�慨鏀箂ql锛堣嫢涓篺alse鍒欎笉鍙�慨鏀癸級 */
       "SqlCodeEditable": true
     }
 

+ 21 - 48
Sqler/Module/AutoTemp/Controllers/AutoTempController.cs

@@ -1,13 +1,15 @@
-using System.Collections.Generic;
-using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc;
+
 using Newtonsoft.Json.Linq;
+
+using System.Collections.Generic;
+
+using Vit.AutoTemp.DataProvider;
 using Vit.Core.Util.ComponentModel.Data;
 using Vit.Core.Util.ComponentModel.Query;
-using Vit.Linq.Query;
-using Vit.Extensions;
 using Vit.Core.Util.ComponentModel.SsError;
-using App.Module.AutoTemp.Logical;
-using App.Module.AutoTemp.Demo;
+using Vit.Extensions;
+using Vit.Linq.Query;
 
 namespace App.Module.AutoTemp.Controllers
 {
@@ -24,52 +26,23 @@ namespace App.Module.AutoTemp.Controllers
 
             IDataProvider dataProvider;
 
-            dataProvider = new Demo.DemoDataProvider { isTree = true, template = "demo_tree" };
-            RegistDataProvider(dataProvider);
-
+            dataProvider = new Vit.AutoTemp.Demo.DemoDataProvider { isTree = true, template = "demo_tree" };
+            Vit.AutoTemp.AutoTempHelp.RegistDataProvider(dataProvider);
 
-            dataProvider = new Demo.DemoDataProvider { isTree = false, template = "demo_list" };
-            RegistDataProvider(dataProvider);
 
+            dataProvider = new Vit.AutoTemp.Demo.DemoDataProvider { isTree = false, template = "demo_list" };
+            Vit.AutoTemp.AutoTempHelp.RegistDataProvider(dataProvider);
 
  
-            dataProvider = new  DemoRepository().ToDataProvider("demo_repository_list");
-            RegistDataProvider(dataProvider);
+            dataProvider = new Vit.AutoTemp.Demo.DemoRepository().ToDataProvider("demo_repository_list");
+            Vit.AutoTemp.AutoTempHelp.RegistDataProvider(dataProvider);
 
             #endregion
 
         }
 
 
-        #region static GetDataProvider
-        public static readonly SortedDictionary<string, IDataProvider> dataProviderMap = new SortedDictionary<string, IDataProvider>();
-
-        public static void RegistDataProvider(params IDataProvider[] dataProviders)
-        {
-            lock (dataProviderMap)
-            {
-                foreach (var dataProvider in dataProviders)
-                {
-                    dataProviderMap[dataProvider.template] = dataProvider;
-                }
-            }
-        }
-
-
-        public static void UnRegistDataProvider(params IDataProvider[] dataProviders)
-        {
-            lock (dataProviderMap)
-                foreach (var dataProvider in dataProviders)
-                {
-                    dataProviderMap.Remove(dataProvider.template);
-                }
-        }
-        public static IDataProvider GetDataProvider(string template)
-        {
-            return dataProviderMap.TryGetValue(template, out var v) ? v : null;
-        }
-
-        #endregion
+   
 
 
         #region (x.1) getConfig
@@ -82,7 +55,7 @@ namespace App.Module.AutoTemp.Controllers
         {
             try
             {
-                var dataProvider = GetDataProvider(template);
+                var dataProvider = Vit.AutoTemp.AutoTempHelp.GetDataProvider(template);
                 if (dataProvider == null) return new SsError { errorMessage = "模板不存在" };
 
                 return dataProvider.getControllerConfig(this);
@@ -111,7 +84,7 @@ namespace App.Module.AutoTemp.Controllers
                 //{ isRoot: true,pid: 5}
                 var arg_ = arg.Deserialize<JObject>() ?? new JObject();
 
-                var dataProvider = GetDataProvider(template);
+                var dataProvider = Vit.AutoTemp.AutoTempHelp.GetDataProvider(template);
                 if (dataProvider == null) return new SsError { errorMessage = "模板不存在" };
 
                 return dataProvider.getList(this, filter_, sort_, page_, arg_);
@@ -134,7 +107,7 @@ namespace App.Module.AutoTemp.Controllers
         {
             try
             {
-                var dataProvider = GetDataProvider(template);
+                var dataProvider = Vit.AutoTemp.AutoTempHelp.GetDataProvider(template);
                 if (dataProvider == null) return new SsError { errorMessage = "模板不存在" };
 
                 return dataProvider.getModel(this, id);
@@ -158,7 +131,7 @@ namespace App.Module.AutoTemp.Controllers
         {
             try
             {
-                var dataProvider = GetDataProvider(template);
+                var dataProvider = Vit.AutoTemp.AutoTempHelp.GetDataProvider(template);
                 if (dataProvider == null) return new SsError { errorMessage = "模板不存在" };
 
                 return dataProvider.insert(this, model);
@@ -182,7 +155,7 @@ namespace App.Module.AutoTemp.Controllers
         {
             try
             {
-                var dataProvider = GetDataProvider(template);
+                var dataProvider = Vit.AutoTemp.AutoTempHelp.GetDataProvider(template);
                 if (dataProvider == null) return new SsError { errorMessage = "模板不存在" };
 
                 return dataProvider.update(this, model);
@@ -205,7 +178,7 @@ namespace App.Module.AutoTemp.Controllers
         {
             try
             {
-                var dataProvider = GetDataProvider(template);
+                var dataProvider = Vit.AutoTemp.AutoTempHelp.GetDataProvider(template);
                 if (dataProvider == null) return new SsError { errorMessage = "模板不存在" };
 
                 return dataProvider.delete(this, arg);

+ 1 - 1
Sqler/Module/Sqler/Controllers/DataEditor/DataEditorController.cs

@@ -22,7 +22,7 @@ namespace App.Module.Sqler.Controllers.DataEditor
         {
             try
             { 
-                return new ApiReturn<List<string>> { data= AutoTempController.dataProviderMap.Keys.ToList() };
+                return new ApiReturn<List<string>> { data= Vit.AutoTemp.AutoTempHelp.dataProviderMap.Keys.ToList() };
             }
             catch (System.Exception ex)
             {

+ 7 - 5
Sqler/Module/Sqler/Logical/DataEditor/ConfigRepository.cs

@@ -1,13 +1,15 @@
-using Newtonsoft.Json.Linq;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+using System;
 using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+
+using Vit.AutoTemp.Repository;
 using Vit.Core.Util.ComponentModel.Data;
 using Vit.Core.Util.ComponentModel.Query;
 using Vit.Extensions;
 using Vit.Linq.Query;
-using System;
-using System.ComponentModel.DataAnnotations;
-using Newtonsoft.Json;
-using App.Module.AutoTemp.Logical.Repository;
 
 namespace App.Module.Sqler.Logical.DataEditor
 {

+ 23 - 18
Sqler/Module/Sqler/Logical/DataEditor/DataEditorHelp.cs

@@ -1,17 +1,21 @@
-using Microsoft.EntityFrameworkCore;
-using App.Module.AutoTemp.Controllers;
-using App.Module.Sqler.AutoTemp.Logical;
+using App.Module.AutoTemp.Controllers;
 using App.Module.Sqler.Logical.DataEditor.DataProvider;
+
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.DependencyInjection;
+
 using System;
 using System.Collections.Generic;
 using System.Linq;
+
+using Vit.AutoTemp.DataProvider;
+using Vit.AutoTemp.DataProvider.Ef;
 using Vit.Core.Module.Log;
 using Vit.Core.Util.ConfigurationManager;
+using Vit.Db.Module.Schema;
 using Vit.Extensions;
 using Vit.Orm.EntityFramework;
 using Vit.Orm.EntityFramework.Dynamic;
-using Vit.Db.Module.Schema;
-using App.Module.AutoTemp.Logical;
 
 namespace App.Module.Sqler.Logical.DataEditor
 {
@@ -27,7 +31,7 @@ namespace App.Module.Sqler.Logical.DataEditor
             //(x.1)取消注册
             if (dataProviders!=null)
             {
-                global::App.Module.AutoTemp.Controllers.AutoTempController.UnRegistDataProvider(dataProviders.ToArray());
+                Vit.AutoTemp.AutoTempHelp.UnRegistDataProvider(dataProviders.ToArray());
                 dataProviders = null;
             }
 
@@ -43,8 +47,7 @@ namespace App.Module.Sqler.Logical.DataEditor
                     return false;
                 }
 
-                efDbFactory =
-                new DbContextFactory<AutoMapDbContext>().Init(connInfo);
+                efDbFactory = new DbContextFactory<AutoMapDbContext>().Init(connInfo);
             }
 
 
@@ -55,7 +58,7 @@ namespace App.Module.Sqler.Logical.DataEditor
                 {
                     var provideArray = CreateEfDataProviderFromDb();
                     dataProviders = provideArray;
-                    AutoTempController.RegistDataProvider(provideArray);
+                    Vit.AutoTemp.AutoTempHelp.RegistDataProvider(provideArray);
                 }
                 catch (System.Exception ex)
                 {
@@ -67,7 +70,7 @@ namespace App.Module.Sqler.Logical.DataEditor
                 //DbSchemaDataProvider
                 try
                 {
-                    AutoTempController.RegistDataProvider(new DbSchemaDataProvider());
+                    Vit.AutoTemp.AutoTempHelp.RegistDataProvider(new DbSchemaDataProvider());
                 }
                 catch (System.Exception ex)
                 {
@@ -90,7 +93,7 @@ namespace App.Module.Sqler.Logical.DataEditor
 
         public static void InitDataProvider(string tableName)
         {
-            var dataProvider = AutoTempController.GetDataProvider("Sqler_DataEditor_Db_" + tableName) as EfDataProvider;
+            var dataProvider = Vit.AutoTemp.AutoTempHelp.GetDataProvider("Sqler_DataEditor_Db_" + tableName) as EfDataProvider;
             InitDataProvider(dataProvider);
         }
         public static void InitDataProvider(EfDataProvider dataProvider)
@@ -114,7 +117,7 @@ namespace App.Module.Sqler.Logical.DataEditor
 
         #region CreateEfDataProviderFromDb
 
-        static EfDataProvider[] CreateEfDataProviderFromDb()
+        static IDataProvider[] CreateEfDataProviderFromDb()
         {
             List<TableSchema> schema;
             Dictionary<string, Type> entityMap;
@@ -125,22 +128,24 @@ namespace App.Module.Sqler.Logical.DataEditor
 
                 schema = db.AutoGeneratedEntity_schema;
             }
+             
 
-
-            EfDataProvider.DelCreateDbContext CreateDbContext  =(out DbContext context) => {
-                var scope= DataEditorHelp.efDbFactory.CreateDbContext(out var con);
-                context = con;
-                return scope;
+            Func<(IServiceScope, DbContext)> CreateDbContext = () =>
+            {
+                var scope = DataEditorHelp.efDbFactory.CreateDbContext(out var context);   
+                return (scope, context);
             };
 
             return schema.Select((tableSchema) =>
             {
                 var template = "Sqler_DataEditor_Db_" + tableSchema.table_name;
-                var dataProvider= new EfDataProvider(template, tableSchema, entityMap[tableSchema.table_name], CreateDbContext);
+                var dataProvider = new EfDataProvider(template, tableSchema, entityMap[tableSchema.table_name], CreateDbContext);
                 InitDataProvider(dataProvider);
                 return dataProvider;
             }
             ).ToArray();
+
+
         }
 
         #endregion

+ 1 - 1
Sqler/Module/Sqler/Logical/DataEditor/DataProvider/DbSchemaDataProvider.cs

@@ -8,8 +8,8 @@ using Vit.Linq.Query;
 using System.Data;
 using Vit.Core.Util.ComponentModel.SsError;
 using Vit.Core.Module.Log;
-using App.Module.AutoTemp.Logical;
 using Vit.Db.Module.Schema;
+using Vit.AutoTemp.DataProvider;
 
 namespace App.Module.Sqler.Logical.DataEditor.DataProvider
 {

+ 1 - 1
Sqler/Module/Sqler/Logical/SqlBackup/MySqlBackup/ConfigRepository.cs

@@ -7,7 +7,7 @@ using Vit.Linq.Query;
 using System;
 using System.ComponentModel.DataAnnotations;
 using Newtonsoft.Json;
-using App.Module.AutoTemp.Logical.Repository;
+using Vit.AutoTemp.Repository;
 
 namespace App.Module.Sqler.Logical.SqlBackup.MySqlBackup
 {

+ 1 - 1
Sqler/Module/Sqler/Logical/SqlBackup/SqlServerBackup/ConfigRepository.cs

@@ -7,7 +7,7 @@ using Vit.Linq.Query;
 using System;
 using System.ComponentModel.DataAnnotations;
 using Newtonsoft.Json;
-using App.Module.AutoTemp.Logical.Repository;
+using Vit.AutoTemp.Repository;
 
 namespace App.Module.Sqler.Logical.SqlBackup.SqlServerBackup
 {

+ 1 - 1
Sqler/Module/Sqler/Logical/SqlRun/ConfigRepository.cs

@@ -7,7 +7,7 @@ using Vit.Linq.Query;
 using System;
 using System.ComponentModel.DataAnnotations;
 using Newtonsoft.Json;
-using App.Module.AutoTemp.Logical.Repository;
+using Vit.AutoTemp.Repository;
 
 namespace App.Module.Sqler.Logical.SqlRun
 {

+ 1 - 1
Sqler/Module/Sqler/Logical/SqlVersion/ConfigRepository.cs

@@ -7,7 +7,7 @@ using Vit.Linq.Query;
 using System;
 using System.ComponentModel.DataAnnotations;
 using Newtonsoft.Json;
-using App.Module.AutoTemp.Logical.Repository;
+using Vit.AutoTemp.Repository;
 
 namespace App.Module.Sqler.Logical.SqlVersion
 {

+ 1 - 2
Sqler/Module/Sqler/Logical/SqlVersion/ModuleRepository.cs

@@ -7,8 +7,7 @@ using Vit.Linq.Query;
 using Vit.Core.Util.ConfigurationManager;
 using System.ComponentModel.DataAnnotations;
 using System.IO;
-using Vit.Core.Util.Common;
-using App.Module.AutoTemp.Logical.Repository;
+using Vit.AutoTemp.Repository;
 
 namespace App.Module.Sqler.Logical.SqlVersion
 {

+ 6 - 4
Sqler/Module/Sqler/Logical/SqlVersion/SqlCodeRepository.cs

@@ -1,14 +1,16 @@
 using Newtonsoft.Json.Linq;
+
+using System;
 using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
 using System.Linq;
+
+using Vit.AutoTemp.Repository;
 using Vit.Core.Util.ComponentModel.Data;
 using Vit.Core.Util.ComponentModel.Query;
+using Vit.Core.Util.ConfigurationManager;
 using Vit.Extensions;
 using Vit.Linq.Query;
-using Vit.Core.Util.ConfigurationManager;
-using System;
-using System.ComponentModel.DataAnnotations;
-using App.Module.AutoTemp.Logical.Repository;
 
 namespace App.Module.Sqler.Logical.SqlVersion
 {

+ 14 - 14
Sqler/Module/Sqler/Logical/SqlVersion/SqlVersionHelp.cs

@@ -5,10 +5,11 @@ using Vit.Orm.EntityFramework;
 using App.Module.AutoTemp.Controllers;
 using Vit.Extensions;
 using System;
-using App.Module.Sqler.AutoTemp.Logical;
-using App.Module.AutoTemp.Logical;
 using System.Collections.Generic;
- 
+using App.Module.Sqler.Logical.DataEditor;
+using Microsoft.Extensions.DependencyInjection;
+using Vit.AutoTemp.DataProvider;
+using Vit.AutoTemp.DataProvider.Ef;
 
 namespace App.Module.Sqler.Logical.SqlVersion
 {
@@ -64,19 +65,19 @@ namespace App.Module.Sqler.Logical.SqlVersion
             //(x.1)取消注册
             if (dataProviders.Count>0)
             {
-                global::App.Module.AutoTemp.Controllers.AutoTempController.UnRegistDataProvider(dataProviders.ToArray());
+                Vit.AutoTemp.AutoTempHelp.UnRegistDataProvider(dataProviders.ToArray());
                 dataProviders.Clear();
-            }           
+            }
 
             //(x.2)注册 SqlVersion Config
-            global::App.Module.AutoTemp.Controllers.AutoTempController.RegistDataProvider(
+            Vit.AutoTemp.AutoTempHelp.RegistDataProvider(
                 new global::App.Module.Sqler.Logical.SqlVersion.ConfigRepository().ToDataProvider("Sqler_SqlVersion_Config"));
 
             //(x.3)注册 ModuleMng            
             SqlVersionModuleModel[] moduleModels = sqlCodeRepositorys.AsQueryable()
                     .Select(rep => new SqlVersionModuleModel(rep) { id = Path.GetFileNameWithoutExtension(rep.fileName) }).ToArray();
 
-            global::App.Module.AutoTemp.Controllers.AutoTempController.RegistDataProvider(
+            Vit.AutoTemp.AutoTempHelp.RegistDataProvider(
                                 new ModuleRepository(moduleModels).ToDataProvider("Sqler_SqlVersion_Module"));
 
 
@@ -88,7 +89,7 @@ namespace App.Module.Sqler.Logical.SqlVersion
 
                 dataProviders.AddRange(sqlCodeDataProviders);
 
-                global::App.Module.AutoTemp.Controllers.AutoTempController.RegistDataProvider(sqlCodeDataProviders);
+                Vit.AutoTemp.AutoTempHelp.RegistDataProvider(sqlCodeDataProviders);
             }
             #endregion
       
@@ -96,11 +97,11 @@ namespace App.Module.Sqler.Logical.SqlVersion
 
             #region (x.6)注册 VersionResult( from database)
             {
-                EfDataProvider.DelCreateDbContext CreateDbContext = (out DbContext context) =>
+
+                Func<(IServiceScope, DbContext)> CreateDbContext = () =>
                 {
-                    var scope = efDbFactory.CreateDbContext(out var dbContext);
-                    context = dbContext;
-                    return scope;
+                    var scope = DataEditorHelp.efDbFactory.CreateDbContext(out var context);
+                    return (scope, context);
                 };
 
 
@@ -117,9 +118,8 @@ namespace App.Module.Sqler.Logical.SqlVersion
 
                 var template = "Sqler_SqlVersion_VersionInfo";
                 var dataProvider = new EfDataProvider(template, typeof(Entity.sqler_version), CreateDbContext);
-                dataProvider.Init();
 
-                AutoTempController.RegistDataProvider(dataProvider);
+                Vit.AutoTemp.AutoTempHelp.RegistDataProvider(dataProvider);
 
             }
             #endregion

+ 4 - 4
Sqler/Module/Sqler/Logical/SqlerHelp.cs

@@ -209,7 +209,7 @@ namespace App.Module.Sqler.Logical
             #region AutoTemp SqlRun
             {
                 //config
-                global::App.Module.AutoTemp.Controllers.AutoTempController.RegistDataProvider(
+                Vit.AutoTemp.AutoTempHelp.RegistDataProvider(
                     new global::App.Module.Sqler.Logical.SqlRun.ConfigRepository().ToDataProvider("Sqler_SqlRun_Config"));
             }
             #endregion
@@ -222,7 +222,7 @@ namespace App.Module.Sqler.Logical
                     Logger.Info("[Sqler.AutoTemp][DataEditor]init ...");
 
                     //RegistDataProvider
-                    global::App.Module.AutoTemp.Controllers.AutoTempController.RegistDataProvider(
+                    Vit.AutoTemp.AutoTempHelp.RegistDataProvider(
                         new global::App.Module.Sqler.Logical.DataEditor.ConfigRepository().ToDataProvider("Sqler_DataEditor_Config"));
 
 
@@ -242,10 +242,10 @@ namespace App.Module.Sqler.Logical
             #region AutoTemp SqlBackup
             {
                 //config
-                global::App.Module.AutoTemp.Controllers.AutoTempController.RegistDataProvider( 
+                Vit.AutoTemp.AutoTempHelp.RegistDataProvider( 
                     new global::App.Module.Sqler.Logical.SqlBackup.SqlServerBackup.ConfigRepository().ToDataProvider("Sqler_SqlBackup_SqlServerBackup_Config"));
 
-                global::App.Module.AutoTemp.Controllers.AutoTempController.RegistDataProvider(
+                Vit.AutoTemp.AutoTempHelp.RegistDataProvider(
                    new global::App.Module.Sqler.Logical.SqlBackup.MySqlBackup.ConfigRepository().ToDataProvider("Sqler_SqlBackup_MySqlBackup_Config"));
 
                 Logger.Info("[Sqler.AutoTemp]inited SqlBackup!");

+ 17 - 7
Sqler/Program.cs

@@ -6,6 +6,7 @@ using Vit.Core.Module.Log;
 using Vit.Extensions;
 using System.Linq;
 using App.Module.Sqler.Logical;
+using Microsoft.Extensions.Logging;
 
 namespace App
 {
@@ -28,16 +29,25 @@ namespace App
             if (args == null) args = new string[] { };
 
             #region (x.2) --quiet
+            Logger.PrintToTxt = false;
+            Logger.PrintToConsole = false;
+
             if (args.Any(arg => arg == "--quiet") == true)
             {
-                Logger.OnLog = (level, msg) => { };
-            }
-            else
-            {
-                Logger.OnLog = (level, msg) => { Console.WriteLine((level == Level.INFO ? "" : "[" + level + "]") + msg); };
-                //Logger.OnLog = (level, msg) => { Console.WriteLine("[" + level.ToString().ToLower() + "]" + msg); };
+               
             }
-            #endregion
+			else
+			{
+				//Logger.OnLog = (level, msg) => { Console.WriteLine((level == Level.INFO ? "" : "[" + level + "]") + msg); };
+				Logger.log.AddCollector(new Vit.Core.Module.Log.LogCollector.Collector
+				{
+					OnLog = (msg) =>
+					{
+						Console.WriteLine((msg.level == Level.info ? "" : "[" + msg.level + "]") + msg.message);
+					}
+				});
+			}
+			#endregion
 
 
 

+ 10 - 5
Sqler/Sqler.csproj

@@ -7,7 +7,7 @@
 
 	<PropertyGroup>
 		<TargetFramework>netcoreapp2.1</TargetFramework>
-		<Version>3.0.12</Version>
+		<Version>3.0.13</Version>
 		<Description>https://github.com/serset/Sqler</Description>
 		<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
 		<PreserveCompilationContext>true</PreserveCompilationContext>
@@ -23,10 +23,15 @@
 	<ItemGroup>
 		<PackageReference Include="Microsoft.AspNetCore.App" />
 
-		<PackageReference Include="Vit.WebHost" Version="2.1.12" />
-		<PackageReference Include="Vit.Orm.EntityFramework.Dynamic" Version="2.2.8" />
-		<PackageReference Include="Vit.Db.DbMng" Version="2.2.8" />
-		<PackageReference Include="Sers.Core" Version="2.1.13" />
+		<PackageReference Include="Vit.WebHost" Version="2.1.16" />
+		<PackageReference Include="Vit.Orm.EntityFramework.Dynamic" Version="2.2.10" />
+		<PackageReference Include="Vit.Db.DbMng" Version="2.2.10" />
+		<PackageReference Include="Sers.Core" Version="2.1.18" />
+	</ItemGroup>
+
+
+	<ItemGroup>
+	  <ProjectReference Include="..\Vit.AutoTemp\Vit.AutoTemp.csproj" />
 	</ItemGroup>
 
 

+ 5 - 3
Sqler/Doc/AutoTemp.txt → Sqler/wwwroot/autoTemp/AutoTemp.txt

@@ -1,3 +1,5 @@
+autoTemp 2.0.2(2022-02-10)
+
 可通过修改数据库字段的注释 来配置字段控件属性。如:
  
     [fieldIgnore]        忽略当前字段
@@ -66,9 +68,9 @@ filter:
     http://localhost:4570/autoTemp/Scripts/autoTemp/list.html?dataProvider=LocalStorageProvider&tree=false
 
 
-
-
-
+	http://localhost:4570/autoTemp/Scripts/autoTemp/list.html?apiRoute=/autoTemp/data/demo_list/{action}
+	http://localhost:4570/autoTemp/Scripts/autoTemp/list.html?apiRoute=/autoTemp/data/demo_repository_list/{action}
+	http://localhost:4570/autoTemp/Scripts/autoTemp/list.html?apiRoute=/autoTemp/data/demo_tree/{action}
 
 
 

+ 0 - 3
Sqler/wwwroot/autoTemp/Scripts/infoGet/readme.md

@@ -1,3 +0,0 @@
-infoGet 2.0.1(2020-02-19)
-
-http://localhost:4570/infoGet/widget/demo/demo.html

+ 0 - 0
Sqler/Doc/infoGet.txt → Sqler/wwwroot/autoTemp/infoGet.txt


+ 0 - 3
Sqler/wwwroot/autoTemp/readme.md

@@ -1,3 +0,0 @@
-autoTemp 2.0.1(2020-02-19)
-
- 

+ 41 - 7
Sqler/Module/AutoTemp/Logical/AutoTempHelp.cs → Vit.AutoTemp/AutoTempHelp.cs

@@ -1,16 +1,19 @@
-using System.Collections.Generic;
-using Newtonsoft.Json.Linq;
-using Vit.Extensions;
-using System.Text.RegularExpressions;
+using Newtonsoft.Json.Linq;
+
 using System;
-using System.Linq;
+using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
+using System.Linq;
 using System.Reflection;
-using Vit.Core.Util.XmlComment;
+using System.Text.RegularExpressions;
+
+using Vit.AutoTemp.DataProvider;
 using Vit.Core.Module.Log;
+using Vit.Core.Util.XmlComment;
 using Vit.Db.Module.Schema;
+using Vit.Extensions;
 
-namespace App.Module.AutoTemp.Logical
+namespace Vit.AutoTemp
 {
     public class AutoTempHelp
     {
@@ -295,5 +298,36 @@ namespace App.Module.AutoTemp.Logical
             return controllerConfig;
         }
         #endregion
+
+
+        #region static dataProviderMap
+        public readonly static SortedDictionary<string, IDataProvider> dataProviderMap = new SortedDictionary<string, IDataProvider>();
+
+        public static void RegistDataProvider(params IDataProvider[] dataProviders)
+        {
+            lock (dataProviderMap)
+            {
+                foreach (var dataProvider in dataProviders)
+                {
+                    dataProviderMap[dataProvider.template] = dataProvider;
+                }
+            }
+        }
+
+
+        public static void UnRegistDataProvider(params IDataProvider[] dataProviders)
+        {
+            lock (dataProviderMap)
+                foreach (var dataProvider in dataProviders)
+                {
+                    dataProviderMap.Remove(dataProvider.template);
+                }
+        }
+        public static IDataProvider GetDataProvider(string template)
+        {
+            return dataProviderMap.TryGetValue(template, out var v) ? v : null;
+        }
+
+        #endregion
     }
 }

+ 193 - 0
Vit.AutoTemp/Controllers/AutoTempController.cs

@@ -0,0 +1,193 @@
+using Microsoft.AspNetCore.Mvc;
+
+using Newtonsoft.Json.Linq;
+
+using System.Collections.Generic;
+
+using Vit.AutoTemp.DataProvider;
+using Vit.Core.Util.ComponentModel.Data;
+using Vit.Core.Util.ComponentModel.Query;
+using Vit.Core.Util.ComponentModel.SsError;
+using Vit.Extensions;
+using Vit.Linq.Query;
+
+namespace App.Module.AutoTemp.Controllers
+{
+    // apiRoute=/autoTemp/data/{template}/{action}
+    [Route("autoTemp/data")]
+    [ApiController]
+    public class AutoTempController : ControllerBase
+    {
+
+
+        static AutoTempController()
+        {
+            #region init demo        
+
+            IDataProvider dataProvider;
+
+            dataProvider = new Vit.AutoTemp.Demo.DemoDataProvider { isTree = true, template = "demo_tree" };
+            Vit.AutoTemp.AutoTempHelp.RegistDataProvider(dataProvider);
+
+
+            dataProvider = new Vit.AutoTemp.Demo.DemoDataProvider { isTree = false, template = "demo_list" };
+            Vit.AutoTemp.AutoTempHelp.RegistDataProvider(dataProvider);
+
+
+            dataProvider = new Vit.AutoTemp.Demo.DemoRepository().ToDataProvider("demo_repository_list");
+            Vit.AutoTemp.AutoTempHelp.RegistDataProvider(dataProvider);
+
+            #endregion
+
+        }
+
+
+
+
+
+        #region (x.1) getConfig
+        /// <summary>
+        /// GET autoTemp/getConfig
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet("{template}/getConfig")]
+        public ApiReturn getConfig(string template)
+        {
+            try
+            {
+                var dataProvider = Vit.AutoTemp.AutoTempHelp.GetDataProvider(template);
+                if (dataProvider == null) return new SsError { errorMessage = "模板不存在" };
+
+                return dataProvider.getControllerConfig(this);
+            }
+            catch (System.Exception ex)
+            {
+                return (SsError)ex.GetBaseException();
+            }
+        }
+
+        #endregion
+
+        #region (x.2) getList
+        /// <summary>
+        /// GET autoTemp/getList
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet("{template}/getList")]
+        public ApiReturn getList(string template, [FromQuery] string filter, [FromQuery] string sort, [FromQuery] string page, [FromQuery] string arg)
+        {
+            try
+            {
+                var page_ = page.Deserialize<PageInfo>();
+                var filter_ = filter.Deserialize<List<DataFilter>>() ?? new List<DataFilter>();
+                var sort_ = sort.Deserialize<SortItem[]>();
+                //{ isRoot: true,pid: 5}
+                var arg_ = arg.Deserialize<JObject>() ?? new JObject();
+
+                var dataProvider = Vit.AutoTemp.AutoTempHelp.GetDataProvider(template);
+                if (dataProvider == null) return new SsError { errorMessage = "模板不存在" };
+
+                return dataProvider.getList(this, filter_, sort_, page_, arg_);
+            }
+            catch (System.Exception ex)
+            {
+                return (SsError)ex.GetBaseException();
+            }
+        }
+
+        #endregion
+
+        #region (x.3) getModel
+        /// <summary>
+        /// GET autoTemp/getModel
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet("{template}/getModel")]
+        public ApiReturn getModel(string template, [FromQuery] string id)
+        {
+            try
+            {
+                var dataProvider = Vit.AutoTemp.AutoTempHelp.GetDataProvider(template);
+                if (dataProvider == null) return new SsError { errorMessage = "模板不存在" };
+
+                return dataProvider.getModel(this, id);
+            }
+            catch (System.Exception ex)
+            {
+                return (SsError)ex.GetBaseException();
+            }
+        }
+        #endregion
+
+
+
+        #region (x.4) insert
+        /// <summary>
+        /// POST autoTemp/insert
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("{template}/insert")]
+        public ApiReturn insert(string template, [FromBody] JObject model)
+        {
+            try
+            {
+                var dataProvider = Vit.AutoTemp.AutoTempHelp.GetDataProvider(template);
+                if (dataProvider == null) return new SsError { errorMessage = "模板不存在" };
+
+                return dataProvider.insert(this, model);
+            }
+            catch (System.Exception ex)
+            {
+                return (SsError)ex.GetBaseException();
+            }
+        }
+        #endregion
+
+
+
+        #region (x.5) update
+        /// <summary>
+        /// PUT autoTemp/update
+        /// </summary>
+        /// <returns></returns>
+        [HttpPut("{template}/update")]
+        public ApiReturn update(string template, [FromBody] JObject model)
+        {
+            try
+            {
+                var dataProvider = Vit.AutoTemp.AutoTempHelp.GetDataProvider(template);
+                if (dataProvider == null) return new SsError { errorMessage = "模板不存在" };
+
+                return dataProvider.update(this, model);
+            }
+            catch (System.Exception ex)
+            {
+                return (SsError)ex.GetBaseException();
+            }
+        }
+        #endregion
+
+
+        #region (x.6) delete
+        /// <summary>
+        /// DELETE autoTemp/delete
+        /// </summary>
+        /// <returns></returns>
+        [HttpDelete("{template}/delete")]
+        public ApiReturn delete(string template, [FromBody] JObject arg)
+        {
+            try
+            {
+                var dataProvider = Vit.AutoTemp.AutoTempHelp.GetDataProvider(template);
+                if (dataProvider == null) return new SsError { errorMessage = "模板不存在" };
+
+                return dataProvider.delete(this, arg);
+            }
+            catch (System.Exception ex)
+            {
+                return (SsError)ex.GetBaseException();
+            }
+        }
+        #endregion 
+    }
+}

+ 197 - 0
Vit.AutoTemp/DataProvider/Ef/EfDataProvider_DbSet.cs

@@ -0,0 +1,197 @@
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.DependencyInjection;
+
+using Newtonsoft.Json.Linq;
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+using Vit.Core.Util.ComponentModel.Data;
+using Vit.Core.Util.ComponentModel.Query;
+using Vit.Core.Util.ComponentModel.SsError;
+using Vit.Db.Module.Schema;
+using Vit.Extensions;
+using Vit.Extensions.ObjectExt;
+using Vit.Linq.Query;
+using Vit.Orm.EntityFramework.Extensions;
+
+namespace Vit.AutoTemp.DataProvider.Ef
+{
+    public class EfDataProvider<Model, DbContext> : IDataProvider
+        where Model : class
+        where DbContext : Microsoft.EntityFrameworkCore.DbContext
+    {
+
+        public string template { get; private set; }
+        public bool isTree => pidField != null;
+        public TableSchema tableSchema { get; private set; }
+
+
+        string idField;
+        string pidField;
+        Type entityType;
+        JObject controllerConfig;
+        Func<(IServiceScope, DbContext, DbSet<Model>)> CreateDbContext;
+
+        public EfDataProvider(string template, Type entityType, Func<(IServiceScope, DbContext, DbSet<Model>)> CreateDbContext) :
+            this(template, AutoTempHelp.EfEntityToTableSchema(entityType), entityType, CreateDbContext)
+        {
+        }
+
+        public EfDataProvider(string template, TableSchema tableSchema, Type entityType, Func<(IServiceScope, DbContext, DbSet<Model>)> CreateDbContext)
+        {
+            this.template = template;
+
+            this.tableSchema = tableSchema;
+            this.entityType = entityType;
+
+            this.CreateDbContext = CreateDbContext;
+
+            Init();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public void Init()
+        {
+            controllerConfig = AutoTempHelp.BuildControllerConfigByTable(tableSchema);
+
+            idField = controllerConfig["idField"]?.Value<string>();
+            pidField = controllerConfig["pidField"]?.Value<string>();
+        }
+
+
+
+        #region getConfig
+        public ApiReturn getControllerConfig(object sender)
+        {
+            return new ApiReturn<JObject>(controllerConfig);
+        }
+        #endregion
+
+
+
+        #region getList
+        public ApiReturn getList(object sender, List<DataFilter> filter, IEnumerable<SortItem> sort, PageInfo page, JObject arg)
+        {
+            var (scope, dbContext,dbSet) = CreateDbContext();
+            using (scope)
+            {
+                var queryable = dbSet.AsQueryable();
+
+                var pageData = queryable.ToPageData(filter, sort, page, (object ori) => { return ori.ConvertBySerialize<JObject>(); });
+
+                #region _childrenCount       
+                if (isTree)
+                {
+                    var tasks = pageData.rows.Select(async m =>
+                    {
+                        var filters = new[] { new DataFilter { field = pidField, opt = "=", value = m[idField].GetValue() } };
+                        var count = await queryable.IQueryable_Where(filters).Ef_CountAsync();
+                        m["_childrenCount"] = count;
+                    });
+                    Task.WaitAll(tasks.ToArray());
+                }
+                #endregion
+
+                return new ApiReturn<object> { data = pageData };
+            }
+        }
+        #endregion
+
+
+        #region getModel
+        public ApiReturn getModel(object sender, string id)
+        {
+            var (scope, dbContext, dbSet) = CreateDbContext();
+            using (scope)
+            {
+                var queryable = dbSet.AsQueryable();
+
+                queryable = queryable.Where(new[] { new DataFilter { field = idField, opt = "=", value = id } });
+
+                return new ApiReturn<object> { data = queryable.FirstOrDefault() };
+            }
+        }
+        #endregion
+
+        #region insert
+        public ApiReturn insert(object sender, JObject model)
+        {
+            var userModel = model.ConvertBySerialize(entityType);
+
+            var (scope, dbContext, dbSet) = CreateDbContext();
+            using (scope)
+            {
+                dbContext.Add(userModel);
+                dbContext.SaveChanges();
+            }
+            return new ApiReturn<object>(userModel);
+        }
+        #endregion
+
+
+        #region update
+        public ApiReturn update(object sender, JObject model)
+        {
+            var userModel = model.ConvertBySerialize(entityType);
+
+            var (scope, dbContext, dbSet) = CreateDbContext();
+            using (scope)
+            {
+                var queryable = dbSet.AsQueryable();
+
+                var entity = queryable
+                 .Where(new[] { new DataFilter { field = idField, opt = "=", value = model[idField] } })
+                 .FirstOrDefault();
+
+                if (entity == null)
+                {
+                    return new SsError
+                    {
+                        errorMessage = "待修改的数据不存在"
+                    };
+                }
+
+                entity.CopyNotNullProrertyFrom(userModel);
+
+                dbContext.Update(entity);
+                dbContext.SaveChanges();
+                return new ApiReturn<object> { data = entity };
+            }
+        }
+        #endregion
+
+
+        #region delete
+        public ApiReturn delete(object sender, JObject arg)
+        {
+            var (scope, dbContext, dbSet) = CreateDbContext();
+            using (scope)
+            {
+                var queryable = dbSet.AsQueryable();
+
+                var entity = queryable
+                    .Where(new[] { new DataFilter { field = idField, opt = "=", value = arg["id"].GetValue() } })
+                    .FirstOrDefault();
+
+                if (entity == null)
+                {
+                    return new SsError
+                    {
+                        errorMessage = "数据不存在"
+                    };
+                }
+
+                dbContext.Remove(entity);
+                dbContext.SaveChanges();
+                return new ApiReturn();
+            }
+        }
+        #endregion
+    }
+}

+ 47 - 53
Sqler/Module/Sqler/AutoTemp/EfDataProvider.cs → Vit.AutoTemp/DataProvider/Ef/EfDataProvider_IQueryable.cs

@@ -1,54 +1,50 @@
-using Newtonsoft.Json.Linq;
+
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.DependencyInjection;
+
+using Newtonsoft.Json.Linq;
+
+using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Threading.Tasks;
+
 using Vit.Core.Util.ComponentModel.Data;
 using Vit.Core.Util.ComponentModel.Query;
+using Vit.Core.Util.ComponentModel.SsError;
+using Vit.Db.Module.Schema;
 using Vit.Extensions;
-using Vit.Linq.Query;
 using Vit.Extensions.ObjectExt;
+using Vit.Linq.Query;
 using Vit.Orm.EntityFramework.Extensions;
-using System;
-using Vit.Core.Util.ComponentModel.SsError;
-using System.Threading.Tasks;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.EntityFrameworkCore;
-using App.Module.AutoTemp.Logical;
-using Vit.Db.Module.Schema;
 
-namespace App.Module.Sqler.AutoTemp.Logical
+namespace Vit.AutoTemp.DataProvider.Ef
 {
 
-    public class EfDataProvider : IDataProvider 
+    public class EfDataProvider : IDataProvider
     {
 
-        public delegate IServiceScope DelCreateDbContext(out DbContext context);
-
-        DelCreateDbContext CreateDbContext;
- 
         public string template { get; private set; }
+        public bool isTree => pidField != null;
+        public TableSchema tableSchema { get; private set; }
 
-        JObject controllerConfig;
-
-        string tableName;
 
         string idField;
         string pidField;
-
-
-
-        public bool isTree => pidField != null;
-
         Type entityType;
+        JObject controllerConfig;
 
-        public TableSchema tableSchema { get; private set; }
+
+        Func<(IServiceScope, DbContext)> CreateDbContext;
+        public Func<DbContext, IQueryable> GetQueryable;
 
 
-        public EfDataProvider(string template, Type entityType, DelCreateDbContext CreateDbContext) :
-            this(template,AutoTempHelp.EfEntityToTableSchema(entityType), entityType, CreateDbContext)
+        public EfDataProvider(string template, Type entityType, Func<(IServiceScope, DbContext)> CreateDbContext) :
+            this(template, AutoTempHelp.EfEntityToTableSchema(entityType), entityType, CreateDbContext)
         {
         }
 
-        public EfDataProvider(string template, TableSchema tableSchema, Type entityType, DelCreateDbContext CreateDbContext)
+        public EfDataProvider(string template, TableSchema tableSchema, Type entityType, Func<(IServiceScope, DbContext)> CreateDbContext)
         {
             this.template = template;
 
@@ -56,18 +52,17 @@ namespace App.Module.Sqler.AutoTemp.Logical
             this.entityType = entityType;
 
             this.CreateDbContext = CreateDbContext;
+            GetQueryable = dbContext => dbContext.GetQueryableByTableName(tableSchema.table_name);
 
-            //Init();
+            Init();
         }
 
-        
+
         /// <summary>
-        /// 需要手动调用
+        /// 
         /// </summary>
         public void Init()
         {
-            tableName = tableSchema.table_name;
-
             controllerConfig = AutoTempHelp.BuildControllerConfigByTable(tableSchema);
 
             idField = controllerConfig["idField"]?.Value<string>();
@@ -75,11 +70,6 @@ namespace App.Module.Sqler.AutoTemp.Logical
         }
 
 
-
-
-
-
-
         #region getConfig
         public ApiReturn getControllerConfig(object sender)
         {
@@ -92,10 +82,10 @@ namespace App.Module.Sqler.AutoTemp.Logical
         #region getList
         public ApiReturn getList(object sender, List<DataFilter> filter, IEnumerable<SortItem> sort, PageInfo page, JObject arg)
         {
-            using (var scope = CreateDbContext(out var db))
+            var (scope, dbContext) = CreateDbContext();
+            using (scope)
             {
-                
-                var queryable = db.GetQueryableByTableName(tableName);
+                var queryable = GetQueryable(dbContext);
 
                 var pageData = queryable.Ef_ToPageDataAsync(filter, sort, page, (object ori) => { return ori.ConvertBySerialize<JObject>(); }).Result;
 
@@ -121,9 +111,10 @@ namespace App.Module.Sqler.AutoTemp.Logical
         #region getModel
         public ApiReturn getModel(object sender, string id)
         {
-            using (var scope = CreateDbContext(out var db))
+            var (scope, dbContext) = CreateDbContext();
+            using (scope)
             {
-                var queryable = db.GetQueryableByTableName(tableName);
+                var queryable = GetQueryable(dbContext);
 
                 queryable = queryable.IQueryable_Where(new DataFilter { field = idField, opt = "=", value = id });
 
@@ -137,10 +128,11 @@ namespace App.Module.Sqler.AutoTemp.Logical
         {
             var userModel = model.ConvertBySerialize(entityType);
 
-            using (var scope = CreateDbContext(out var db))
+            var (scope, dbContext) = CreateDbContext();
+            using (scope)
             {
-                db.Add(userModel);
-                db.SaveChanges();
+                dbContext.Add(userModel);
+                dbContext.SaveChanges();
             }
             return new ApiReturn<object>(userModel);
         }
@@ -152,9 +144,10 @@ namespace App.Module.Sqler.AutoTemp.Logical
         {
             var userModel = model.ConvertBySerialize(entityType);
 
-            using (var scope = CreateDbContext(out var db))
+            var (scope, dbContext) = CreateDbContext();
+            using (scope)
             {
-                var queryable = db.GetQueryableByTableName(tableName);
+                var queryable = GetQueryable(dbContext);
 
                 var entity = queryable
                     .IQueryable_Where(new DataFilter { field = idField, opt = "=", value = model[idField] })
@@ -170,8 +163,8 @@ namespace App.Module.Sqler.AutoTemp.Logical
 
                 entity.CopyNotNullProrertyFrom(userModel);
 
-                db.Update(entity);
-                db.SaveChanges();
+                dbContext.Update(entity);
+                dbContext.SaveChanges();
                 return new ApiReturn<object> { data = entity };
             }
         }
@@ -181,9 +174,10 @@ namespace App.Module.Sqler.AutoTemp.Logical
         #region delete
         public ApiReturn delete(object sender, JObject arg)
         {
-            using (var scope = CreateDbContext(out var db))
+            var (scope, dbContext) = CreateDbContext();
+            using (scope)
             {
-                var queryable = db.GetQueryableByTableName(tableName);
+                var queryable = GetQueryable(dbContext);
 
                 var entity = queryable
                     .IQueryable_Where(new DataFilter { field = idField, opt = "=", value = arg["id"].GetValue() })
@@ -197,8 +191,8 @@ namespace App.Module.Sqler.AutoTemp.Logical
                     };
                 }
 
-                db.Remove(entity);
-                db.SaveChanges();
+                dbContext.Remove(entity);
+                dbContext.SaveChanges();
                 return new ApiReturn();
             }
         }

+ 5 - 3
Sqler/Module/AutoTemp/Logical/IDataProvider.cs → Vit.AutoTemp/DataProvider/IDataProvider.cs

@@ -1,10 +1,12 @@
-using System.Collections.Generic;
-using Newtonsoft.Json.Linq;
+using Newtonsoft.Json.Linq;
+
+using System.Collections.Generic;
+
 using Vit.Core.Util.ComponentModel.Data;
 using Vit.Core.Util.ComponentModel.Query;
 using Vit.Linq.Query;
 
-namespace App.Module.AutoTemp.Logical
+namespace Vit.AutoTemp.DataProvider
 {
     public interface IDataProvider
     {

+ 2 - 2
Sqler/Module/AutoTemp/Demo/DemoDataProvider.cs → Vit.AutoTemp/Demo/DemoDataProvider.cs

@@ -7,9 +7,9 @@ using Vit.Extensions;
 using Vit.Linq.Query;
 using Vit.Extensions.ObjectExt;
 using Vit.Core.Util.Common;
-using App.Module.AutoTemp.Logical;
+using Vit.AutoTemp.DataProvider;
 
-namespace App.Module.AutoTemp.Demo
+namespace Vit.AutoTemp.Demo
 {
     public class DemoDataProvider : IDataProvider
     {

+ 2 - 2
Sqler/Module/AutoTemp/Demo/DemoRepository.cs → Vit.AutoTemp/Demo/DemoRepository.cs

@@ -4,13 +4,13 @@ using Vit.Core.Util.ComponentModel.Query;
 using Vit.Extensions;
 using Vit.Linq.Query;
 using System.ComponentModel.DataAnnotations;
-using App.Module.AutoTemp.Logical.Repository;
 using Vit.Core.Util.Common;
 using System.Linq;
 using Vit.Extensions.ObjectExt;
 using Vit.Core.Util.ComponentModel.SsError;
+using Vit.AutoTemp.Repository;
 
-namespace App.Module.AutoTemp.Demo
+namespace Vit.AutoTemp.Demo
 {
 
     #region Repository

+ 3 - 6
Sqler/Module/AutoTemp/Logical/Extensions/IRepositoryExtensions.cs → Vit.AutoTemp/Repository/Extensions/IRepositoryExtensions.cs

@@ -1,5 +1,6 @@
-using App.Module.AutoTemp.Logical.Repository;
-using System;
+using System;
+
+using Vit.AutoTemp.Repository;
 
 namespace Vit.Extensions
 {
@@ -13,9 +14,5 @@ namespace Vit.Extensions
         }
         #endregion
 
- 
-
-
-
     }
 }

+ 2 - 1
Sqler/Module/AutoTemp/Logical/Repository/IRepository.cs → Vit.AutoTemp/Repository/IRepository.cs

@@ -1,9 +1,10 @@
 using System.Collections.Generic;
+
 using Vit.Core.Util.ComponentModel.Data;
 using Vit.Core.Util.ComponentModel.Query;
 using Vit.Linq.Query;
 
-namespace App.Module.AutoTemp.Logical.Repository
+namespace Vit.AutoTemp.Repository
 {
     public interface IRepository<T>
     {

+ 8 - 5
Sqler/Module/AutoTemp/Logical/Repository/RespositoryDataProvider.cs → Vit.AutoTemp/Repository/RespositoryDataProvider.cs

@@ -1,12 +1,15 @@
-using System.Collections.Generic;
-using Newtonsoft.Json.Linq;
+using Newtonsoft.Json.Linq;
+
+using System;
+using System.Collections.Generic;
+
+using Vit.AutoTemp.DataProvider;
 using Vit.Core.Util.ComponentModel.Data;
 using Vit.Core.Util.ComponentModel.Query;
-using Vit.Linq.Query;
 using Vit.Extensions;
-using System;
+using Vit.Linq.Query;
 
-namespace App.Module.AutoTemp.Logical.Repository
+namespace Vit.AutoTemp.Repository
 {
     public class RespositoryDataProvider<T>:IDataProvider
     {     

+ 30 - 0
Vit.AutoTemp/Vit.AutoTemp.csproj

@@ -0,0 +1,30 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+	<PropertyGroup>
+		<TargetFramework>netstandard2.0</TargetFramework>
+	</PropertyGroup>
+
+	<PropertyGroup>
+		<Version>2.0.1</Version>
+		<Description>https://github.com/serset/AutoTemp</Description>
+	</PropertyGroup>
+
+	<PropertyGroup>
+		<DocumentationFile>bin\Debug\netstandard2.0\Vit.AutoTemp.xml</DocumentationFile>
+	</PropertyGroup>
+
+
+	<ItemGroup>
+		<Compile Remove="Controllers\**" />
+		<EmbeddedResource Remove="Controllers\**" />
+		<None Remove="Controllers\**" />
+	</ItemGroup>
+
+
+	<ItemGroup>
+		<PackageReference Include="Vit.Db" Version="2.2.10" />
+		<PackageReference Include="Vit.Orm.EntityFramework" Version="2.2.10" />
+	</ItemGroup>
+
+
+</Project>