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