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>
<Version>3.2.601</Version>
<Version>3.2.602</Version>
</PropertyGroup>
<ItemGroup>

View File

@ -159,6 +159,13 @@ namespace base_entity
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)
{
#region IFreeSql
@ -201,6 +208,21 @@ namespace base_entity
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
#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();
//var txt1 = fsql.Ado.Query<(string, string)>("select '꧁꫞꯭丑小鸭꫞꧂', '123123中国人' from dual");

View File

@ -80,8 +80,9 @@ namespace FreeSql
Attach(data);
if (_db.Options.EnableAddOrUpdateNavigateList)
await AddOrUpdateNavigateListAsync(data, true, null, cancellationToken);
return;
}
return;
break;
}
}
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(data));
@ -124,21 +125,22 @@ namespace FreeSql
await AddOrUpdateNavigateListAsync(item, true, null, cancellationToken);
return;
default:
foreach (var s in data)
await AddPrivAsync(s, false, cancellationToken);
return;
if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1)
{
foreach (var s in data)
await AddPrivAsync(s, false, cancellationToken);
return;
}
break;
}
}
else
{
//进入队列,等待 SaveChanges 时执行
//进入队列,等待 SaveChanges 时执行
foreach (var item in data)
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item));
AttachRange(data);
if (_db.Options.EnableAddOrUpdateNavigateList)
foreach (var item in data)
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item));
AttachRange(data);
if (_db.Options.EnableAddOrUpdateNavigateList)
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)

View File

@ -79,8 +79,9 @@ namespace FreeSql
Attach(data);
if (_db.Options.EnableAddOrUpdateNavigateList)
AddOrUpdateNavigateList(data, true, null);
return;
}
return;
break;
}
}
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(data));
@ -127,21 +128,22 @@ namespace FreeSql
AddOrUpdateNavigateList(item, true, null);
return;
default:
foreach (var s in data)
AddPriv(s, false);
return;
if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1)
{
foreach (var s in data)
AddPriv(s, false);
return;
}
break;
}
}
else
{
//进入队列,等待 SaveChanges 时执行
//进入队列,等待 SaveChanges 时执行
foreach (var item in data)
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item));
AttachRange(data);
if (_db.Options.EnableAddOrUpdateNavigateList)
foreach (var item in data)
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item));
AttachRange(data);
if (_db.Options.EnableAddOrUpdateNavigateList)
foreach (var item in data)
AddOrUpdateNavigateList(item, true, null);
}
AddOrUpdateNavigateList(item, true, null);
}
/// <summary>

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(3, g.oracle.Select<ToDel1Pk>().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();
Assert.Equal(0, g.oracle.Select<ToDel2Pk>().Count());