mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 增加 AsTable 自动分表 InsertOrUpdate 的支持;#1066
This commit is contained in:
parent
703b9aeafa
commit
2130a967a8
@ -134,7 +134,7 @@ namespace base_entity
|
|||||||
{
|
{
|
||||||
#region 初始化 IFreeSql
|
#region 初始化 IFreeSql
|
||||||
var fsql = new FreeSql.FreeSqlBuilder()
|
var fsql = new FreeSql.FreeSqlBuilder()
|
||||||
//.UseAutoSyncStructure(true)
|
.UseAutoSyncStructure(true)
|
||||||
.UseNoneCommandParameter(true)
|
.UseNoneCommandParameter(true)
|
||||||
|
|
||||||
.UseConnectionString(FreeSql.DataType.Sqlite, "data source=test1.db;max pool size=5")
|
.UseConnectionString(FreeSql.DataType.Sqlite, "data source=test1.db;max pool size=5")
|
||||||
@ -144,10 +144,10 @@ namespace base_entity
|
|||||||
|
|
||||||
//.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=2")
|
//.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=2")
|
||||||
|
|
||||||
//.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3")
|
.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true")
|
||||||
|
|
||||||
.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2")
|
//.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2")
|
||||||
.UseNameConvert(FreeSql.Internal.NameConvertType.ToLower)
|
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToLower)
|
||||||
|
|
||||||
//.UseConnectionString(FreeSql.DataType.Oracle, "user id=user1;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=2")
|
//.UseConnectionString(FreeSql.DataType.Oracle, "user id=user1;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=2")
|
||||||
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
|
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
|
||||||
@ -172,75 +172,75 @@ namespace base_entity
|
|||||||
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
|
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
fsql.Aop.ParseExpression += (_, e) =>
|
// fsql.Aop.ParseExpression += (_, e) =>
|
||||||
{
|
// {
|
||||||
//解析 POCO Jsonb a.Customer.Name
|
// //解析 POCO Jsonb a.Customer.Name
|
||||||
if (e.Expression is MemberExpression memExp)
|
// if (e.Expression is MemberExpression memExp)
|
||||||
{
|
// {
|
||||||
var parentMemExps = new Stack<MemberExpression>();
|
// var parentMemExps = new Stack<MemberExpression>();
|
||||||
parentMemExps.Push(memExp);
|
// parentMemExps.Push(memExp);
|
||||||
while (true)
|
// while (true)
|
||||||
{
|
// {
|
||||||
switch (memExp.Expression.NodeType)
|
// switch (memExp.Expression.NodeType)
|
||||||
{
|
// {
|
||||||
case ExpressionType.MemberAccess:
|
// case ExpressionType.MemberAccess:
|
||||||
memExp = memExp.Expression as MemberExpression;
|
// memExp = memExp.Expression as MemberExpression;
|
||||||
if (memExp == null) return;
|
// if (memExp == null) return;
|
||||||
parentMemExps.Push(memExp);
|
// parentMemExps.Push(memExp);
|
||||||
break;
|
// break;
|
||||||
case ExpressionType.Parameter:
|
// case ExpressionType.Parameter:
|
||||||
var tb = fsql.CodeFirst.GetTableByEntity(memExp.Expression.Type);
|
// var tb = fsql.CodeFirst.GetTableByEntity(memExp.Expression.Type);
|
||||||
if (tb == null) return;
|
// if (tb == null) return;
|
||||||
if (tb.ColumnsByCs.TryGetValue(parentMemExps.Pop().Member.Name, out var trycol) == false) return;
|
// if (tb.ColumnsByCs.TryGetValue(parentMemExps.Pop().Member.Name, out var trycol) == false) return;
|
||||||
if (new[] { typeof(JToken), typeof(JObject), typeof(JArray) }.Contains(trycol.Attribute.MapType.NullableTypeOrThis()) == false) return;
|
// if (new[] { typeof(JToken), typeof(JObject), typeof(JArray) }.Contains(trycol.Attribute.MapType.NullableTypeOrThis()) == false) return;
|
||||||
var tmpcol = tb.ColumnsByPosition.OrderBy(a => a.Attribute.Name.Length).First();
|
// var tmpcol = tb.ColumnsByPosition.OrderBy(a => a.Attribute.Name.Length).First();
|
||||||
var result = e.FreeParse(Expression.MakeMemberAccess(memExp.Expression, tb.Properties[tmpcol.CsName]));
|
// var result = e.FreeParse(Expression.MakeMemberAccess(memExp.Expression, tb.Properties[tmpcol.CsName]));
|
||||||
result = result.Replace(tmpcol.Attribute.Name, trycol.Attribute.Name);
|
// result = result.Replace(tmpcol.Attribute.Name, trycol.Attribute.Name);
|
||||||
while (parentMemExps.Any())
|
// while (parentMemExps.Any())
|
||||||
{
|
// {
|
||||||
memExp = parentMemExps.Pop();
|
// memExp = parentMemExps.Pop();
|
||||||
result = $"{result}->>'{memExp.Member.Name}'";
|
// result = $"{result}->>'{memExp.Member.Name}'";
|
||||||
}
|
// }
|
||||||
e.Result = result;
|
// e.Result = result;
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
};
|
// };
|
||||||
|
|
||||||
var methodJsonConvertDeserializeObject = typeof(JsonConvert).GetMethod("DeserializeObject", new[] { typeof(string), typeof(Type) });
|
// var methodJsonConvertDeserializeObject = typeof(JsonConvert).GetMethod("DeserializeObject", new[] { typeof(string), typeof(Type) });
|
||||||
var methodJsonConvertSerializeObject = typeof(JsonConvert).GetMethod("SerializeObject", new[] { typeof(object), typeof(JsonSerializerSettings) });
|
// var methodJsonConvertSerializeObject = typeof(JsonConvert).GetMethod("SerializeObject", new[] { typeof(object), typeof(JsonSerializerSettings) });
|
||||||
var jsonConvertSettings = JsonConvert.DefaultSettings?.Invoke() ?? new JsonSerializerSettings();
|
// var jsonConvertSettings = JsonConvert.DefaultSettings?.Invoke() ?? new JsonSerializerSettings();
|
||||||
FreeSql.Internal.Utils.dicExecuteArrayRowReadClassOrTuple[typeof(Customer)] = true;
|
// FreeSql.Internal.Utils.dicExecuteArrayRowReadClassOrTuple[typeof(Customer)] = true;
|
||||||
FreeSql.Internal.Utils.GetDataReaderValueBlockExpressionObjectToStringIfThenElse.Add((LabelTarget returnTarget, Expression valueExp, Expression elseExp, Type type) =>
|
// FreeSql.Internal.Utils.GetDataReaderValueBlockExpressionObjectToStringIfThenElse.Add((LabelTarget returnTarget, Expression valueExp, Expression elseExp, Type type) =>
|
||||||
{
|
// {
|
||||||
return Expression.IfThenElse(
|
// return Expression.IfThenElse(
|
||||||
Expression.TypeIs(valueExp, typeof(Customer)),
|
// Expression.TypeIs(valueExp, typeof(Customer)),
|
||||||
Expression.Return(returnTarget, Expression.Call(methodJsonConvertSerializeObject, Expression.Convert(valueExp, typeof(object)), Expression.Constant(jsonConvertSettings)), typeof(object)),
|
// Expression.Return(returnTarget, Expression.Call(methodJsonConvertSerializeObject, Expression.Convert(valueExp, typeof(object)), Expression.Constant(jsonConvertSettings)), typeof(object)),
|
||||||
elseExp);
|
// elseExp);
|
||||||
});
|
// });
|
||||||
FreeSql.Internal.Utils.GetDataReaderValueBlockExpressionSwitchTypeFullName.Add((LabelTarget returnTarget, Expression valueExp, Type type) =>
|
// FreeSql.Internal.Utils.GetDataReaderValueBlockExpressionSwitchTypeFullName.Add((LabelTarget returnTarget, Expression valueExp, Type type) =>
|
||||||
{
|
// {
|
||||||
if (type == typeof(Customer)) return Expression.Return(returnTarget, Expression.TypeAs(Expression.Call(methodJsonConvertDeserializeObject, Expression.Convert(valueExp, typeof(string)), Expression.Constant(type)), type));
|
// if (type == typeof(Customer)) return Expression.Return(returnTarget, Expression.TypeAs(Expression.Call(methodJsonConvertDeserializeObject, Expression.Convert(valueExp, typeof(string)), Expression.Constant(type)), type));
|
||||||
return null;
|
// return null;
|
||||||
});
|
// });
|
||||||
|
|
||||||
var seid = fsql.Insert(new SomeEntity
|
// var seid = fsql.Insert(new SomeEntity
|
||||||
{
|
// {
|
||||||
Customer = JsonConvert.DeserializeObject<Customer>(@"{
|
// Customer = JsonConvert.DeserializeObject<Customer>(@"{
|
||||||
""Age"": 25,
|
// ""Age"": 25,
|
||||||
""Name"": ""Joe"",
|
// ""Name"": ""Joe"",
|
||||||
""Orders"": [
|
// ""Orders"": [
|
||||||
{ ""OrderPrice"": 9, ""ShippingAddress"": ""Some address 1"" },
|
// { ""OrderPrice"": 9, ""ShippingAddress"": ""Some address 1"" },
|
||||||
{ ""OrderPrice"": 23, ""ShippingAddress"": ""Some address 2"" }
|
// { ""OrderPrice"": 23, ""ShippingAddress"": ""Some address 2"" }
|
||||||
]
|
// ]
|
||||||
}")
|
//}")
|
||||||
}).ExecuteIdentity();
|
// }).ExecuteIdentity();
|
||||||
var selist = fsql.Select<SomeEntity>().ToList();
|
// var selist = fsql.Select<SomeEntity>().ToList();
|
||||||
|
|
||||||
var joes = fsql.Select<SomeEntity>()
|
// var joes = fsql.Select<SomeEntity>()
|
||||||
.Where(e => e.Customer.Name == "Joe")
|
// .Where(e => e.Customer.Name == "Joe")
|
||||||
.ToSql();
|
// .ToSql();
|
||||||
|
|
||||||
var testitems = new[]
|
var testitems = new[]
|
||||||
{
|
{
|
||||||
@ -293,6 +293,18 @@ namespace base_entity
|
|||||||
var sqlatd801 = sqlatd8.ToSql();
|
var sqlatd801 = sqlatd8.ToSql();
|
||||||
var sqlatd802 = sqlatd8.ExecuteAffrows();
|
var sqlatd802 = sqlatd8.ExecuteAffrows();
|
||||||
|
|
||||||
|
var sqlatd12 = fsql.InsertOrUpdate<AsTableLog>().SetSource(testitems[0]);
|
||||||
|
var sqlatd1201 = sqlatd12.ToSql();
|
||||||
|
var sqlatd1202 = sqlatd12.ExecuteAffrows();
|
||||||
|
|
||||||
|
var sqlatd22 = fsql.InsertOrUpdate<AsTableLog>().SetSource(testitems[5]);
|
||||||
|
var sqlatd2201 = sqlatd22.ToSql();
|
||||||
|
var sqlatd2202 = sqlatd22.ExecuteAffrows();
|
||||||
|
|
||||||
|
var sqlatd32 = fsql.InsertOrUpdate<AsTableLog>().SetSource(testitems);
|
||||||
|
var sqlatd3201 = sqlatd32.ToSql();
|
||||||
|
var sqlatd3202 = sqlatd32.ExecuteAffrows();
|
||||||
|
|
||||||
var sqls1 = fsql.Select<AsTableLog>();
|
var sqls1 = fsql.Select<AsTableLog>();
|
||||||
var sqls101 = sqls1.ToSql();
|
var sqls101 = sqls1.ToSql();
|
||||||
var sqls102 = sqls1.ToList();
|
var sqls102 = sqls1.ToList();
|
||||||
|
@ -124,13 +124,25 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
|
|
||||||
protected string TableRuleInvoke()
|
protected string TableRuleInvoke()
|
||||||
{
|
{
|
||||||
if (_tableRule == null) return _table.DbName;
|
var tbname = _table?.DbName ?? "";
|
||||||
var newname = _tableRule(_table.DbName);
|
if (_tableRule == null && _table.AsTableImpl == null) return tbname;
|
||||||
if (newname == _table.DbName) return _table.DbName;
|
string newname = null;
|
||||||
if (string.IsNullOrEmpty(newname)) return _table.DbName;
|
if (_table.AsTableImpl != null)
|
||||||
|
{
|
||||||
|
if (_source.Any())
|
||||||
|
newname = _table.AsTableImpl.GetTableNameByColumnValue(_table.AsTableColumn.GetValue(_source.FirstOrDefault()));
|
||||||
|
else if (_tableRule == null)
|
||||||
|
newname = _table.AsTableImpl.GetTableNameByColumnValue(DateTime.Now);
|
||||||
|
else
|
||||||
|
newname = _tableRule(_table.DbName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
newname = _tableRule(_table.DbName);
|
||||||
|
if (newname == tbname) return tbname;
|
||||||
|
if (string.IsNullOrEmpty(newname)) return tbname;
|
||||||
if (_orm.CodeFirst.IsSyncStructureToLower) newname = newname.ToLower();
|
if (_orm.CodeFirst.IsSyncStructureToLower) newname = newname.ToLower();
|
||||||
if (_orm.CodeFirst.IsSyncStructureToUpper) newname = newname.ToUpper();
|
if (_orm.CodeFirst.IsSyncStructureToUpper) newname = newname.ToUpper();
|
||||||
if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(_table.Type, newname);
|
if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(_table?.Type, newname);
|
||||||
return newname;
|
return newname;
|
||||||
}
|
}
|
||||||
public IInsertOrUpdate<T1> AsTable(Func<string, string> tableRule)
|
public IInsertOrUpdate<T1> AsTable(Func<string, string> tableRule)
|
||||||
@ -204,20 +216,35 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="source"></param>
|
/// <param name="source"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public NativeTuple<List<T1>, List<T1>> SplitSourceByIdentityValueIsNull(List<T1> source)
|
public NativeTuple<List<T1>[], List<T1>[]> SplitSourceByIdentityValueIsNull(List<T1> source)
|
||||||
{
|
{
|
||||||
if (_SplitSourceByIdentityValueIsNullFlag == 1) return NativeTuple.Create(source, new List<T1>());
|
if (_SplitSourceByIdentityValueIsNullFlag == 1) return NativeTuple.Create(new[] { source }, new List<T1>[0]);
|
||||||
if (_SplitSourceByIdentityValueIsNullFlag == 2) return NativeTuple.Create(new List<T1>(), source);
|
if (_SplitSourceByIdentityValueIsNullFlag == 2) return NativeTuple.Create(new List<T1>[0], new[] { source });
|
||||||
if (IdentityColumn == null) return NativeTuple.Create(source, new List<T1>());
|
if (IdentityColumn == null) return NativeTuple.Create(LocalSplitSourceByAsTable(source), new List<T1>[0]);
|
||||||
var ret = NativeTuple.Create(new List<T1>(), new List<T1>());
|
var item1 = new List<T1>();
|
||||||
|
var item2 = new List<T1>();
|
||||||
foreach (var item in source)
|
foreach (var item in source)
|
||||||
{
|
{
|
||||||
if (object.Equals(_orm.GetEntityValueWithPropertyName(_table.Type, item, IdentityColumn.CsName), IdentityColumn.CsType.CreateInstanceGetDefaultValue()))
|
if (object.Equals(_orm.GetEntityValueWithPropertyName(_table.Type, item, IdentityColumn.CsName), IdentityColumn.CsType.CreateInstanceGetDefaultValue()))
|
||||||
ret.Item2.Add(item); //自增无值的,记录为直接插入
|
item2.Add(item); //自增无值的,记录为直接插入
|
||||||
else
|
else
|
||||||
ret.Item1.Add(item);
|
item1.Add(item);
|
||||||
|
}
|
||||||
|
return NativeTuple.Create(LocalSplitSourceByAsTable(item1), LocalSplitSourceByAsTable(item2));
|
||||||
|
|
||||||
|
List<T1>[] LocalSplitSourceByAsTable(List<T1> loc1)
|
||||||
|
{
|
||||||
|
if (_table.AsTableImpl != null)
|
||||||
|
{
|
||||||
|
var atarr = loc1.Select(a => new
|
||||||
|
{
|
||||||
|
item = a,
|
||||||
|
splitKey = _table.AsTableImpl.GetTableNameByColumnValue(_table.AsTableColumn.GetValue(a), true)
|
||||||
|
}).GroupBy(a => a.splitKey, a => a.item).Select(a => a.ToList()).ToArray();
|
||||||
|
return atarr;
|
||||||
|
}
|
||||||
|
return new[] { loc1 };
|
||||||
}
|
}
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract string ToSql();
|
public abstract string ToSql();
|
||||||
@ -235,12 +262,18 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
|
|
||||||
if (_transaction != null || _orm.Ado.MasterPool == null)
|
if (_transaction != null || _orm.Ado.MasterPool == null)
|
||||||
{
|
{
|
||||||
_source = ss.Item1;
|
|
||||||
_SplitSourceByIdentityValueIsNullFlag = 1;
|
_SplitSourceByIdentityValueIsNullFlag = 1;
|
||||||
affrows += this.RawExecuteAffrows();
|
foreach (var tmpsource in ss.Item1)
|
||||||
_source = ss.Item2;
|
{
|
||||||
|
_source = tmpsource;
|
||||||
|
affrows += this.RawExecuteAffrows();
|
||||||
|
}
|
||||||
_SplitSourceByIdentityValueIsNullFlag = 2;
|
_SplitSourceByIdentityValueIsNullFlag = 2;
|
||||||
affrows += this.RawExecuteAffrows();
|
foreach (var tmpsource in ss.Item2)
|
||||||
|
{
|
||||||
|
_source = tmpsource;
|
||||||
|
affrows += this.RawExecuteAffrows();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -251,12 +284,18 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore);
|
_orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_source = ss.Item1;
|
|
||||||
_SplitSourceByIdentityValueIsNullFlag = 1;
|
_SplitSourceByIdentityValueIsNullFlag = 1;
|
||||||
affrows += this.RawExecuteAffrows();
|
foreach (var tmpsource in ss.Item1)
|
||||||
_source = ss.Item2;
|
{
|
||||||
|
_source = tmpsource;
|
||||||
|
affrows += this.RawExecuteAffrows();
|
||||||
|
}
|
||||||
_SplitSourceByIdentityValueIsNullFlag = 2;
|
_SplitSourceByIdentityValueIsNullFlag = 2;
|
||||||
affrows += this.RawExecuteAffrows();
|
foreach (var tmpsource in ss.Item2)
|
||||||
|
{
|
||||||
|
_source = tmpsource;
|
||||||
|
affrows += this.RawExecuteAffrows();
|
||||||
|
}
|
||||||
_transaction.Commit();
|
_transaction.Commit();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "提交", null));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "提交", null));
|
||||||
}
|
}
|
||||||
@ -341,12 +380,18 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
|
|
||||||
if (_transaction != null || _orm.Ado.MasterPool == null)
|
if (_transaction != null || _orm.Ado.MasterPool == null)
|
||||||
{
|
{
|
||||||
_source = ss.Item1;
|
|
||||||
_SplitSourceByIdentityValueIsNullFlag = 1;
|
_SplitSourceByIdentityValueIsNullFlag = 1;
|
||||||
affrows += await this.RawExecuteAffrowsAsync(cancellationToken);
|
foreach (var tmpsource in ss.Item1)
|
||||||
_source = ss.Item2;
|
{
|
||||||
|
_source = tmpsource;
|
||||||
|
affrows += await this.RawExecuteAffrowsAsync(cancellationToken);
|
||||||
|
}
|
||||||
_SplitSourceByIdentityValueIsNullFlag = 2;
|
_SplitSourceByIdentityValueIsNullFlag = 2;
|
||||||
affrows += await this.RawExecuteAffrowsAsync(cancellationToken);
|
foreach (var tmpsource in ss.Item2)
|
||||||
|
{
|
||||||
|
_source = tmpsource;
|
||||||
|
affrows += await this.RawExecuteAffrowsAsync(cancellationToken);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -357,12 +402,18 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore);
|
_orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_source = ss.Item1;
|
|
||||||
_SplitSourceByIdentityValueIsNullFlag = 1;
|
_SplitSourceByIdentityValueIsNullFlag = 1;
|
||||||
affrows += await this.RawExecuteAffrowsAsync(cancellationToken);
|
foreach (var tmpsource in ss.Item1)
|
||||||
_source = ss.Item2;
|
{
|
||||||
|
_source = tmpsource;
|
||||||
|
affrows += await this.RawExecuteAffrowsAsync(cancellationToken);
|
||||||
|
}
|
||||||
_SplitSourceByIdentityValueIsNullFlag = 2;
|
_SplitSourceByIdentityValueIsNullFlag = 2;
|
||||||
affrows += await this.RawExecuteAffrowsAsync(cancellationToken);
|
foreach (var tmpsource in ss.Item2)
|
||||||
|
{
|
||||||
|
_source = tmpsource;
|
||||||
|
affrows += await this.RawExecuteAffrowsAsync(cancellationToken);
|
||||||
|
}
|
||||||
_transaction.Commit();
|
_transaction.Commit();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "提交", null));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "提交", null));
|
||||||
}
|
}
|
||||||
|
@ -22,8 +22,8 @@ namespace FreeSql.Dameng.Curd
|
|||||||
var sqls = new string[2];
|
var sqls = new string[2];
|
||||||
var dbParams = new List<DbParameter>();
|
var dbParams = new List<DbParameter>();
|
||||||
var ds = SplitSourceByIdentityValueIsNull(_source);
|
var ds = SplitSourceByIdentityValueIsNull(_source);
|
||||||
if (ds.Item1.Any()) sqls[0] = getMergeSql(ds.Item1);
|
if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
|
||||||
if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2);
|
if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
|
||||||
_params = dbParams.ToArray();
|
_params = dbParams.ToArray();
|
||||||
if (ds.Item2.Any() == false) return sqls[0];
|
if (ds.Item2.Any() == false) return sqls[0];
|
||||||
if (ds.Item1.Any() == false) return sqls[1];
|
if (ds.Item1.Any() == false) return sqls[1];
|
||||||
|
@ -22,8 +22,8 @@ namespace FreeSql.Firebird.Curd
|
|||||||
var sqls = new string[2];
|
var sqls = new string[2];
|
||||||
var dbParams = new List<DbParameter>();
|
var dbParams = new List<DbParameter>();
|
||||||
var ds = SplitSourceByIdentityValueIsNull(_source);
|
var ds = SplitSourceByIdentityValueIsNull(_source);
|
||||||
if (ds.Item1.Any()) sqls[0] = getMergeSql(ds.Item1);
|
if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
|
||||||
if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2);
|
if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
|
||||||
_params = dbParams.ToArray();
|
_params = dbParams.ToArray();
|
||||||
if (ds.Item2.Any() == false) return sqls[0];
|
if (ds.Item2.Any() == false) return sqls[0];
|
||||||
if (ds.Item1.Any() == false) return sqls[1];
|
if (ds.Item1.Any() == false) return sqls[1];
|
||||||
|
@ -22,8 +22,8 @@ namespace FreeSql.GBase.Curd
|
|||||||
var sqls = new string[2];
|
var sqls = new string[2];
|
||||||
var dbParams = new List<DbParameter>();
|
var dbParams = new List<DbParameter>();
|
||||||
var ds = SplitSourceByIdentityValueIsNull(_source);
|
var ds = SplitSourceByIdentityValueIsNull(_source);
|
||||||
if (ds.Item1.Any()) sqls[0] = getMergeSql(ds.Item1);
|
if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
|
||||||
if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2);
|
if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
|
||||||
_params = dbParams.ToArray();
|
_params = dbParams.ToArray();
|
||||||
if (ds.Item2.Any() == false) return sqls[0];
|
if (ds.Item2.Any() == false) return sqls[0];
|
||||||
if (ds.Item1.Any() == false) return sqls[1];
|
if (ds.Item1.Any() == false) return sqls[1];
|
||||||
|
@ -20,8 +20,8 @@ namespace FreeSql.KingbaseES
|
|||||||
var sqls = new string[2];
|
var sqls = new string[2];
|
||||||
var dbParams = new List<DbParameter>();
|
var dbParams = new List<DbParameter>();
|
||||||
var ds = SplitSourceByIdentityValueIsNull(_source);
|
var ds = SplitSourceByIdentityValueIsNull(_source);
|
||||||
if (ds.Item1.Any()) sqls[0] = getInsertSql(ds.Item1, false);
|
if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false)));
|
||||||
if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2, true);
|
if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true)));
|
||||||
_params = dbParams.ToArray();
|
_params = dbParams.ToArray();
|
||||||
if (ds.Item2.Any() == false) return sqls[0];
|
if (ds.Item2.Any() == false) return sqls[0];
|
||||||
if (ds.Item1.Any() == false) return sqls[1];
|
if (ds.Item1.Any() == false) return sqls[1];
|
||||||
|
@ -22,8 +22,8 @@ namespace FreeSql.MySql.Curd
|
|||||||
var sqls = new string[2];
|
var sqls = new string[2];
|
||||||
var dbParams = new List<DbParameter>();
|
var dbParams = new List<DbParameter>();
|
||||||
var ds = SplitSourceByIdentityValueIsNull(_source);
|
var ds = SplitSourceByIdentityValueIsNull(_source);
|
||||||
if (ds.Item1.Any()) sqls[0] = getInsertSql(ds.Item1, false);
|
if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false)));
|
||||||
if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2, true);
|
if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true)));
|
||||||
_params = dbParams.ToArray();
|
_params = dbParams.ToArray();
|
||||||
if (ds.Item2.Any() == false) return sqls[0];
|
if (ds.Item2.Any() == false) return sqls[0];
|
||||||
if (ds.Item1.Any() == false) return sqls[1];
|
if (ds.Item1.Any() == false) return sqls[1];
|
||||||
|
@ -22,8 +22,8 @@ namespace FreeSql.Odbc.Dameng
|
|||||||
var sqls = new string[2];
|
var sqls = new string[2];
|
||||||
var dbParams = new List<DbParameter>();
|
var dbParams = new List<DbParameter>();
|
||||||
var ds = SplitSourceByIdentityValueIsNull(_source);
|
var ds = SplitSourceByIdentityValueIsNull(_source);
|
||||||
if (ds.Item1.Any()) sqls[0] = getMergeSql(ds.Item1);
|
if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
|
||||||
if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2);
|
if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
|
||||||
_params = dbParams.ToArray();
|
_params = dbParams.ToArray();
|
||||||
if (ds.Item2.Any() == false) return sqls[0];
|
if (ds.Item2.Any() == false) return sqls[0];
|
||||||
if (ds.Item1.Any() == false) return sqls[1];
|
if (ds.Item1.Any() == false) return sqls[1];
|
||||||
|
@ -22,8 +22,8 @@ namespace FreeSql.Odbc.KingbaseES
|
|||||||
var sqls = new string[2];
|
var sqls = new string[2];
|
||||||
var dbParams = new List<DbParameter>();
|
var dbParams = new List<DbParameter>();
|
||||||
var ds = SplitSourceByIdentityValueIsNull(_source);
|
var ds = SplitSourceByIdentityValueIsNull(_source);
|
||||||
if (ds.Item1.Any()) sqls[0] = getInsertSql(ds.Item1, false);
|
if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false)));
|
||||||
if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2, true);
|
if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true)));
|
||||||
_params = dbParams.ToArray();
|
_params = dbParams.ToArray();
|
||||||
if (ds.Item2.Any() == false) return sqls[0];
|
if (ds.Item2.Any() == false) return sqls[0];
|
||||||
if (ds.Item1.Any() == false) return sqls[1];
|
if (ds.Item1.Any() == false) return sqls[1];
|
||||||
|
@ -21,8 +21,8 @@ namespace FreeSql.Odbc.MySql
|
|||||||
var sqls = new string[2];
|
var sqls = new string[2];
|
||||||
var dbParams = new List<DbParameter>();
|
var dbParams = new List<DbParameter>();
|
||||||
var ds = SplitSourceByIdentityValueIsNull(_source);
|
var ds = SplitSourceByIdentityValueIsNull(_source);
|
||||||
if (ds.Item1.Any()) sqls[0] = getInsertSql(ds.Item1, false);
|
if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false)));
|
||||||
if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2, true);
|
if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true)));
|
||||||
_params = dbParams.ToArray();
|
_params = dbParams.ToArray();
|
||||||
if (ds.Item2.Any() == false) return sqls[0];
|
if (ds.Item2.Any() == false) return sqls[0];
|
||||||
if (ds.Item1.Any() == false) return sqls[1];
|
if (ds.Item1.Any() == false) return sqls[1];
|
||||||
|
@ -22,8 +22,8 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
var sqls = new string[2];
|
var sqls = new string[2];
|
||||||
var dbParams = new List<DbParameter>();
|
var dbParams = new List<DbParameter>();
|
||||||
var ds = SplitSourceByIdentityValueIsNull(_source);
|
var ds = SplitSourceByIdentityValueIsNull(_source);
|
||||||
if (ds.Item1.Any()) sqls[0] = getMergeSql(ds.Item1);
|
if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
|
||||||
if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2);
|
if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
|
||||||
_params = dbParams.ToArray();
|
_params = dbParams.ToArray();
|
||||||
if (ds.Item2.Any() == false) return sqls[0];
|
if (ds.Item2.Any() == false) return sqls[0];
|
||||||
if (ds.Item1.Any() == false) return sqls[1];
|
if (ds.Item1.Any() == false) return sqls[1];
|
||||||
|
@ -20,8 +20,8 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
var sqls = new string[2];
|
var sqls = new string[2];
|
||||||
var dbParams = new List<DbParameter>();
|
var dbParams = new List<DbParameter>();
|
||||||
var ds = SplitSourceByIdentityValueIsNull(_source);
|
var ds = SplitSourceByIdentityValueIsNull(_source);
|
||||||
if (ds.Item1.Any()) sqls[0] = getInsertSql(ds.Item1, false);
|
if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false)));
|
||||||
if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2, true);
|
if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true)));
|
||||||
_params = dbParams.ToArray();
|
_params = dbParams.ToArray();
|
||||||
if (ds.Item2.Any() == false) return sqls[0];
|
if (ds.Item2.Any() == false) return sqls[0];
|
||||||
if (ds.Item1.Any() == false) return sqls[1];
|
if (ds.Item1.Any() == false) return sqls[1];
|
||||||
|
@ -22,8 +22,8 @@ namespace FreeSql.Odbc.SqlServer
|
|||||||
var sqls = new string[2];
|
var sqls = new string[2];
|
||||||
var dbParams = new List<DbParameter>();
|
var dbParams = new List<DbParameter>();
|
||||||
var ds = SplitSourceByIdentityValueIsNull(_source);
|
var ds = SplitSourceByIdentityValueIsNull(_source);
|
||||||
if (ds.Item1.Any()) sqls[0] = getMergeSql(ds.Item1);
|
if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
|
||||||
if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2);
|
if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
|
||||||
_params = dbParams.ToArray();
|
_params = dbParams.ToArray();
|
||||||
if (ds.Item2.Any() == false) return sqls[0];
|
if (ds.Item2.Any() == false) return sqls[0];
|
||||||
if (ds.Item1.Any() == false) return sqls[1];
|
if (ds.Item1.Any() == false) return sqls[1];
|
||||||
|
@ -22,8 +22,8 @@ namespace FreeSql.Oracle.Curd
|
|||||||
var sqls = new string[2];
|
var sqls = new string[2];
|
||||||
var dbParams = new List<DbParameter>();
|
var dbParams = new List<DbParameter>();
|
||||||
var ds = SplitSourceByIdentityValueIsNull(_source);
|
var ds = SplitSourceByIdentityValueIsNull(_source);
|
||||||
if (ds.Item1.Any()) sqls[0] = getMergeSql(ds.Item1);
|
if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
|
||||||
if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2);
|
if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
|
||||||
_params = dbParams.ToArray();
|
_params = dbParams.ToArray();
|
||||||
if (ds.Item2.Any() == false) return sqls[0];
|
if (ds.Item2.Any() == false) return sqls[0];
|
||||||
if (ds.Item1.Any() == false) return sqls[1];
|
if (ds.Item1.Any() == false) return sqls[1];
|
||||||
|
@ -20,8 +20,8 @@ namespace FreeSql.PostgreSQL.Curd
|
|||||||
var sqls = new string[2];
|
var sqls = new string[2];
|
||||||
var dbParams = new List<DbParameter>();
|
var dbParams = new List<DbParameter>();
|
||||||
var ds = SplitSourceByIdentityValueIsNull(_source);
|
var ds = SplitSourceByIdentityValueIsNull(_source);
|
||||||
if (ds.Item1.Any()) sqls[0] = getInsertSql(ds.Item1, false);
|
if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false)));
|
||||||
if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2, true);
|
if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true)));
|
||||||
_params = dbParams.ToArray();
|
_params = dbParams.ToArray();
|
||||||
if (ds.Item2.Any() == false) return sqls[0];
|
if (ds.Item2.Any() == false) return sqls[0];
|
||||||
if (ds.Item1.Any() == false) return sqls[1];
|
if (ds.Item1.Any() == false) return sqls[1];
|
||||||
|
@ -22,8 +22,8 @@ namespace FreeSql.ShenTong.Curd
|
|||||||
var sqls = new string[2];
|
var sqls = new string[2];
|
||||||
var dbParams = new List<DbParameter>();
|
var dbParams = new List<DbParameter>();
|
||||||
var ds = SplitSourceByIdentityValueIsNull(_source);
|
var ds = SplitSourceByIdentityValueIsNull(_source);
|
||||||
if (ds.Item1.Any()) sqls[0] = getMergeSql(ds.Item1);
|
if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
|
||||||
if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2);
|
if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
|
||||||
_params = dbParams.ToArray();
|
_params = dbParams.ToArray();
|
||||||
if (ds.Item2.Any() == false) return sqls[0];
|
if (ds.Item2.Any() == false) return sqls[0];
|
||||||
if (ds.Item1.Any() == false) return sqls[1];
|
if (ds.Item1.Any() == false) return sqls[1];
|
||||||
|
@ -22,8 +22,8 @@ namespace FreeSql.SqlServer.Curd
|
|||||||
var sqls = new string[2];
|
var sqls = new string[2];
|
||||||
var dbParams = new List<DbParameter>();
|
var dbParams = new List<DbParameter>();
|
||||||
var ds = SplitSourceByIdentityValueIsNull(_source);
|
var ds = SplitSourceByIdentityValueIsNull(_source);
|
||||||
if (ds.Item1.Any()) sqls[0] = getMergeSql(ds.Item1);
|
if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
|
||||||
if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2);
|
if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
|
||||||
_params = dbParams.ToArray();
|
_params = dbParams.ToArray();
|
||||||
if (ds.Item2.Any() == false) return sqls[0];
|
if (ds.Item2.Any() == false) return sqls[0];
|
||||||
if (ds.Item1.Any() == false) return sqls[1];
|
if (ds.Item1.Any() == false) return sqls[1];
|
||||||
|
@ -21,8 +21,8 @@ namespace FreeSql.Sqlite.Curd
|
|||||||
var sqls = new string[2];
|
var sqls = new string[2];
|
||||||
var dbParams = new List<DbParameter>();
|
var dbParams = new List<DbParameter>();
|
||||||
var ds = SplitSourceByIdentityValueIsNull(_source);
|
var ds = SplitSourceByIdentityValueIsNull(_source);
|
||||||
if (ds.Item1.Any()) sqls[0] = getInsertSql(ds.Item1, false);
|
if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false)));
|
||||||
if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2, true);
|
if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true)));
|
||||||
_params = dbParams.ToArray();
|
_params = dbParams.ToArray();
|
||||||
if (ds.Item2.Any() == false) return sqls[0];
|
if (ds.Item2.Any() == false) return sqls[0];
|
||||||
if (ds.Item1.Any() == false) return sqls[1];
|
if (ds.Item1.Any() == false) return sqls[1];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user