diff --git a/Directory.Build.props b/Directory.Build.props
index 1719730d..f0b8ff92 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -10,7 +10,7 @@
- 3.2.601
+ 3.2.602
diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs
index 02baeed9..fd4c629a 100644
--- a/Examples/base_entity/Program.cs
+++ b/Examples/base_entity/Program.cs
@@ -159,6 +159,13 @@ namespace base_entity
public DateTime CreateTime { get; set; }
}
+
+ class CommandTimeoutCascade : IDisposable
+ {
+ public static AsyncLocal _asyncLocalTimeout = new AsyncLocal();
+ 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().ToList();
+ fsql.Select().ToList();
+ fsql.Select().ToList();
+ }
+
+
+
fsql.UseJsonMap();
//var txt1 = fsql.Ado.Query<(string, string)>("select '꧁꫞꯭丑小鸭꫞꧂', '123123中国人' from dual");
diff --git a/FreeSql.DbContext/DbSet/DbSetAsync.cs b/FreeSql.DbContext/DbSet/DbSetAsync.cs
index 884c4485..d90c657d 100644
--- a/FreeSql.DbContext/DbSet/DbSetAsync.cs
+++ b/FreeSql.DbContext/DbSet/DbSetAsync.cs
@@ -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)
diff --git a/FreeSql.DbContext/DbSet/DbSetSync.cs b/FreeSql.DbContext/DbSet/DbSetSync.cs
index 3fb6eaba..cd1178a0 100644
--- a/FreeSql.DbContext/DbSet/DbSetSync.cs
+++ b/FreeSql.DbContext/DbSet/DbSetSync.cs
@@ -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);
}
///
diff --git a/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs
index 0ac06d24..c2743d4e 100644
--- a/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs
@@ -1718,6 +1718,10 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
Assert.Equal(2, g.oracle.Select().Where(a => a.name.StartsWith("name")).ToDelete().ExecuteAffrows());
Assert.Equal(3, g.oracle.Select().Count());
Assert.Equal(3, g.oracle.Select().Where(a => a.name.StartsWith("nick")).Count());
+ Assert.Equal(2, g.oracle.Select().OrderBy(a => a.name).Limit(2).ToDelete().ExecuteAffrows());
+ Assert.Equal(1, g.oracle.Select().Count());
+ Assert.Equal(1, g.oracle.Select().Where(a => a.name.StartsWith("nick")).Count());
+ Assert.Equal("nick3", g.oracle.Select().ToList()[0].name);
g.oracle.Select().ToDelete().ExecuteAffrows();
Assert.Equal(0, g.oracle.Select().Count());