Synchronization code

This commit is contained in:
sunkaixuan
2022-12-26 13:46:23 +08:00
parent 1566d04389
commit cc95ce1837
9 changed files with 89 additions and 3 deletions

View File

@@ -0,0 +1,23 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
namespace SqlSugar
{
public class InsertMethodInfo
{
internal SqlSugarProvider Context { get; set; }
internal MethodInfo MethodInfo { get; set; }
internal object objectValue { get; set; }
public int ExecuteCommand()
{
if (Context == null) return 0;
var inertable=MethodInfo.Invoke(Context, new object[] { objectValue });
var result= inertable.GetType().GetMethod("ExecuteCommand").Invoke(inertable,new object[] { });
return (int)result;
}
}
}

View File

@@ -17,6 +17,7 @@ namespace SqlSugar
if (Context == null) return 0; if (Context == null) return 0;
object objectValue = null; object objectValue = null;
MethodInfo method = GetSaveMethod(ref objectValue); MethodInfo method = GetSaveMethod(ref objectValue);
if (method == null) return 0;
return (int)method.Invoke(objectValue, new object[] { }); return (int)method.Invoke(objectValue, new object[] { });
} }
@@ -41,6 +42,7 @@ namespace SqlSugar
{ {
object objectValue = null; object objectValue = null;
MethodInfo method = GetSaveMethod(ref objectValue); MethodInfo method = GetSaveMethod(ref objectValue);
if (method == null) return new StorageableAsMethodInfo(null);
method = objectValue.GetType().GetMethod("ToStorage"); method = objectValue.GetType().GetMethod("ToStorage");
objectValue = method.Invoke(objectValue, new object[] { }); objectValue = method.Invoke(objectValue, new object[] { });
StorageableAsMethodInfo result = new StorageableAsMethodInfo(type); StorageableAsMethodInfo result = new StorageableAsMethodInfo(type);
@@ -51,6 +53,8 @@ namespace SqlSugar
private MethodInfo GetSaveMethod(ref object callValue) private MethodInfo GetSaveMethod(ref object callValue)
{ {
if (objectValue == null)
return null;
callValue = MethodInfo.Invoke(Context, new object[] { objectValue }); callValue = MethodInfo.Invoke(Context, new object[] { objectValue });
return callValue.GetType().GetMethod("ExecuteCommand"); return callValue.GetType().GetMethod("ExecuteCommand");
} }
@@ -73,6 +77,7 @@ namespace SqlSugar
internal MethodInfo Method { get; set; } internal MethodInfo Method { get; set; }
public int ExecuteCommand() public int ExecuteCommand()
{ {
if (type == null) return 0;
PropertyInfo property = ObjectValue.GetType().GetProperty(type); PropertyInfo property = ObjectValue.GetType().GetProperty(type);
var value = property.GetValue(ObjectValue); var value = property.GetValue(ObjectValue);
var newObj= value.GetType().GetMethod("ExecuteCommand").Invoke(value, new object[] { }); var newObj= value.GetType().GetMethod("ExecuteCommand").Invoke(value, new object[] { });

View File

@@ -675,6 +675,52 @@ namespace SqlSugar
#endregion #endregion
#region Insertable #region Insertable
public InsertMethodInfo InsertableByObject(object singleEntityObjectOrListObject)
{
if (singleEntityObjectOrListObject == null)
return new InsertMethodInfo();
if (singleEntityObjectOrListObject.GetType().FullName.IsCollectionsList())
{
var list = ((IList)singleEntityObjectOrListObject);
if (list == null || list.Count == 0)
return new InsertMethodInfo();
var type = list[0].GetType();
var newList = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(type));
foreach (var item in list)
{
newList.Add(item);
}
var methods = this.Context.GetType().GetMethods()
.Where(it => it.Name == "Insertable")
.Where(it => it.GetGenericArguments().Any())
.Where(it => it.GetParameters().Any(z => z.ParameterType.Name.StartsWith("List")))
.Where(it => it.Name == "Insertable").ToList();
var method = methods.Single().MakeGenericMethod(newList.GetType().GetGenericArguments().First());
InsertMethodInfo result = new InsertMethodInfo()
{
Context = this.Context,
MethodInfo = method,
objectValue = newList
};
return result;
}
else
{
var methods = this.Context.GetType().GetMethods()
.Where(it => it.Name == "Insertable")
.Where(it => it.GetGenericArguments().Any())
.Where(it => it.GetParameters().Any(z => z.ParameterType.Name == "T"))
.Where(it => it.Name == "Insertable").ToList();
var method = methods.Single().MakeGenericMethod(singleEntityObjectOrListObject.GetType());
InsertMethodInfo result = new InsertMethodInfo()
{
Context = this.Context,
MethodInfo = method,
objectValue = singleEntityObjectOrListObject
};
return result;
}
}
public virtual IInsertable<T> Insertable<T>(T[] insertObjs) where T : class, new() public virtual IInsertable<T> Insertable<T>(T[] insertObjs) where T : class, new()
{ {
UtilMethods.CheckArray(insertObjs); UtilMethods.CheckArray(insertObjs);

View File

@@ -215,7 +215,10 @@ namespace SqlSugar
{ {
ScopedContext.InitMappingInfo<T>(); ScopedContext.InitMappingInfo<T>();
} }
public InsertMethodInfo InsertableByObject(object singleEntityObjectOrListObject)
{
return ScopedContext.InsertableByObject(singleEntityObjectOrListObject);
}
public IInsertable<T> Insertable<T>(Dictionary<string, object> columnDictionary) where T : class, new() public IInsertable<T> Insertable<T>(Dictionary<string, object> columnDictionary) where T : class, new()
{ {
return ScopedContext.Insertable<T>(columnDictionary); return ScopedContext.Insertable<T>(columnDictionary);

View File

@@ -70,6 +70,7 @@ namespace SqlSugar
IInsertable<T> Insertable<T>(List<T> insertObjs) where T : class, new(); IInsertable<T> Insertable<T>(List<T> insertObjs) where T : class, new();
IInsertable<T> Insertable<T>(T insertObj) where T : class, new(); IInsertable<T> Insertable<T>(T insertObj) where T : class, new();
IInsertable<T> Insertable<T>(T[] insertObjs) where T : class, new(); IInsertable<T> Insertable<T>(T[] insertObjs) where T : class, new();
InsertMethodInfo InsertableByObject(object singleEntityObjectOrListObject);
#endregion #endregion
#region Queryable #region Queryable

View File

@@ -114,6 +114,7 @@
<Compile Include="Abstract\FastestProvider\SplitFastest.cs" /> <Compile Include="Abstract\FastestProvider\SplitFastest.cs" />
<Compile Include="Abstract\FilterProvider\FilterProvider.cs" /> <Compile Include="Abstract\FilterProvider\FilterProvider.cs" />
<Compile Include="Abstract\InsertableProvider\InsertableHelper.cs" /> <Compile Include="Abstract\InsertableProvider\InsertableHelper.cs" />
<Compile Include="Abstract\InsertableProvider\InsertMethodInfo.cs" />
<Compile Include="Abstract\QueryableProvider\Entities\QueryableAppendColumn.cs" /> <Compile Include="Abstract\QueryableProvider\Entities\QueryableAppendColumn.cs" />
<Compile Include="Abstract\QueryableProvider\Entities\SqlInfo.cs" /> <Compile Include="Abstract\QueryableProvider\Entities\SqlInfo.cs" />
<Compile Include="Abstract\QueryableProvider\QueryableExecuteSqlAsync.cs" /> <Compile Include="Abstract\QueryableProvider\QueryableExecuteSqlAsync.cs" />

View File

@@ -159,6 +159,10 @@ namespace SqlSugar
#endregion #endregion
#region Insertable #region Insertable
public InsertMethodInfo InsertableByObject(object singleEntityObjectOrListObject)
{
return this.Context.InsertableByObject(singleEntityObjectOrListObject);
}
public IInsertable<T> Insertable<T>(Dictionary<string, object> columnDictionary) where T : class, new() public IInsertable<T> Insertable<T>(Dictionary<string, object> columnDictionary) where T : class, new()
{ {
return this.Context.Insertable<T>(columnDictionary); return this.Context.Insertable<T>(columnDictionary);

View File

@@ -232,7 +232,10 @@ namespace SqlSugar
{ {
return ScopedContext.Insertable(insertObjs); return ScopedContext.Insertable(insertObjs);
} }
public InsertMethodInfo InsertableByObject(object singleEntityObjectOrListObject)
{
return ScopedContext.InsertableByObject(singleEntityObjectOrListObject);
}
public void Open() public void Open()
{ {
ScopedContext.Open(); ScopedContext.Open();

View File

@@ -2,7 +2,7 @@
<package > <package >
<metadata> <metadata>
<id>SqlSugarCore</id> <id>SqlSugarCore</id>
<version>5.1.3.41</version> <version>5.1.3.42-preview07</version>
<authors>sunkaixuan</authors> <authors>sunkaixuan</authors>
<owners>果糖大数据科技</owners> <owners>果糖大数据科技</owners>
<licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl> <licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl>