|
@@ -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();
|
|
|
}
|
|
|
}
|