This commit is contained in:
2881099 2022-04-29 00:05:41 +08:00
parent 4d23d331bc
commit b320d084fa
5 changed files with 57 additions and 27 deletions

View File

@ -10,7 +10,7 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<Version>3.2.601</Version> <Version>3.2.602</Version>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@ -159,6 +159,13 @@ namespace base_entity
public DateTime CreateTime { get; set; } public DateTime CreateTime { get; set; }
} }
class CommandTimeoutCascade : IDisposable
{
public static AsyncLocal<int> _asyncLocalTimeout = new AsyncLocal<int>();
public CommandTimeoutCascade(int timeout) => _asyncLocalTimeout.Value = timeout;
public void Dispose() => _asyncLocalTimeout.Value = 0;
}
static void Main(string[] args) static void Main(string[] args)
{ {
#region IFreeSql #region IFreeSql
@ -201,6 +208,21 @@ namespace base_entity
BaseEntity.Initialization(fsql, () => _asyncUow.Value); BaseEntity.Initialization(fsql, () => _asyncUow.Value);
#endregion #endregion
fsql.Aop.CommandBefore += (_, e) =>
{
if (CommandTimeoutCascade._asyncLocalTimeout.Value > 0)
e.Command.CommandTimeout = CommandTimeoutCascade._asyncLocalTimeout.Value;
};
using (new CommandTimeoutCascade(1000))
{
fsql.Select<Order>().ToList();
fsql.Select<Order>().ToList();
fsql.Select<Order>().ToList();
}
fsql.UseJsonMap(); fsql.UseJsonMap();
//var txt1 = fsql.Ado.Query<(string, string)>("select '꧁꫞꯭丑小鸭꫞꧂', '123123中国人' from dual"); //var txt1 = fsql.Ado.Query<(string, string)>("select '꧁꫞꯭丑小鸭꫞꧂', '123123中国人' from dual");

View File

@ -80,9 +80,10 @@ namespace FreeSql
Attach(data); Attach(data);
if (_db.Options.EnableAddOrUpdateNavigateList) if (_db.Options.EnableAddOrUpdateNavigateList)
await AddOrUpdateNavigateListAsync(data, true, null, cancellationToken); await AddOrUpdateNavigateListAsync(data, true, null, cancellationToken);
}
return; return;
} }
break;
}
} }
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(data)); EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(data));
Attach(data); Attach(data);
@ -124,13 +125,15 @@ namespace FreeSql
await AddOrUpdateNavigateListAsync(item, true, null, cancellationToken); await AddOrUpdateNavigateListAsync(item, true, null, cancellationToken);
return; return;
default: default:
if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1)
{
foreach (var s in data) foreach (var s in data)
await AddPrivAsync(s, false, cancellationToken); await AddPrivAsync(s, false, cancellationToken);
return; return;
} }
break;
}
} }
else
{
//进入队列,等待 SaveChanges 时执行 //进入队列,等待 SaveChanges 时执行
foreach (var item in data) foreach (var item in data)
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item)); EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item));
@ -139,7 +142,6 @@ namespace FreeSql
foreach (var item in data) foreach (var item in data)
await AddOrUpdateNavigateListAsync(item, true, null, cancellationToken); await AddOrUpdateNavigateListAsync(item, true, null, cancellationToken);
} }
}
async public Task SaveManyAsync(TEntity item, string propertyName, CancellationToken cancellationToken = default) async public Task SaveManyAsync(TEntity item, string propertyName, CancellationToken cancellationToken = default)
{ {

View File

@ -79,9 +79,10 @@ namespace FreeSql
Attach(data); Attach(data);
if (_db.Options.EnableAddOrUpdateNavigateList) if (_db.Options.EnableAddOrUpdateNavigateList)
AddOrUpdateNavigateList(data, true, null); AddOrUpdateNavigateList(data, true, null);
}
return; return;
} }
break;
}
} }
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(data)); EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(data));
Attach(data); Attach(data);
@ -127,13 +128,15 @@ namespace FreeSql
AddOrUpdateNavigateList(item, true, null); AddOrUpdateNavigateList(item, true, null);
return; return;
default: default:
if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1)
{
foreach (var s in data) foreach (var s in data)
AddPriv(s, false); AddPriv(s, false);
return; return;
} }
break;
}
} }
else
{
//进入队列,等待 SaveChanges 时执行 //进入队列,等待 SaveChanges 时执行
foreach (var item in data) foreach (var item in data)
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item)); EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item));
@ -142,7 +145,6 @@ namespace FreeSql
foreach (var item in data) foreach (var item in data)
AddOrUpdateNavigateList(item, true, null); AddOrUpdateNavigateList(item, true, null);
} }
}
/// <summary> /// <summary>
/// 保存实体的指定 ManyToMany/OneToMany 导航属性(完整对比)<para></para> /// 保存实体的指定 ManyToMany/OneToMany 导航属性(完整对比)<para></para>

View File

@ -1718,6 +1718,10 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
Assert.Equal(2, g.oracle.Select<ToDel1Pk>().Where(a => a.name.StartsWith("name")).ToDelete().ExecuteAffrows()); Assert.Equal(2, g.oracle.Select<ToDel1Pk>().Where(a => a.name.StartsWith("name")).ToDelete().ExecuteAffrows());
Assert.Equal(3, g.oracle.Select<ToDel1Pk>().Count()); Assert.Equal(3, g.oracle.Select<ToDel1Pk>().Count());
Assert.Equal(3, g.oracle.Select<ToDel1Pk>().Where(a => a.name.StartsWith("nick")).Count()); Assert.Equal(3, g.oracle.Select<ToDel1Pk>().Where(a => a.name.StartsWith("nick")).Count());
Assert.Equal(2, g.oracle.Select<ToDel1Pk>().OrderBy(a => a.name).Limit(2).ToDelete().ExecuteAffrows());
Assert.Equal(1, g.oracle.Select<ToDel1Pk>().Count());
Assert.Equal(1, g.oracle.Select<ToDel1Pk>().Where(a => a.name.StartsWith("nick")).Count());
Assert.Equal("nick3", g.oracle.Select<ToDel1Pk>().ToList()[0].name);
g.oracle.Select<ToDel2Pk>().ToDelete().ExecuteAffrows(); g.oracle.Select<ToDel2Pk>().ToDelete().ExecuteAffrows();
Assert.Equal(0, g.oracle.Select<ToDel2Pk>().Count()); Assert.Equal(0, g.oracle.Select<ToDel2Pk>().Count());