Skip to content

Commit b320d08

Browse files
committed
1 parent 4d23d33 commit b320d08

File tree

5 files changed

+57
-27
lines changed

5 files changed

+57
-27
lines changed

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
</PropertyGroup>
1111

1212
<PropertyGroup>
13-
<Version>3.2.601</Version>
13+
<Version>3.2.602</Version>
1414
</PropertyGroup>
1515

1616
<ItemGroup>

Examples/base_entity/Program.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,13 @@ class TopicMapTypeToListDtoMap2
159159
public DateTime CreateTime { get; set; }
160160
}
161161

162+
163+
class CommandTimeoutCascade : IDisposable
164+
{
165+
public static AsyncLocal<int> _asyncLocalTimeout = new AsyncLocal<int>();
166+
public CommandTimeoutCascade(int timeout) => _asyncLocalTimeout.Value = timeout;
167+
public void Dispose() => _asyncLocalTimeout.Value = 0;
168+
}
162169
static void Main(string[] args)
163170
{
164171
#region 初始化 IFreeSql
@@ -201,6 +208,21 @@ static void Main(string[] args)
201208
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
202209
#endregion
203210

211+
fsql.Aop.CommandBefore += (_, e) =>
212+
{
213+
if (CommandTimeoutCascade._asyncLocalTimeout.Value > 0)
214+
e.Command.CommandTimeout = CommandTimeoutCascade._asyncLocalTimeout.Value;
215+
};
216+
217+
using (new CommandTimeoutCascade(1000))
218+
{
219+
fsql.Select<Order>().ToList();
220+
fsql.Select<Order>().ToList();
221+
fsql.Select<Order>().ToList();
222+
}
223+
224+
225+
204226
fsql.UseJsonMap();
205227

206228
//var txt1 = fsql.Ado.Query<(string, string)>("select '꧁꫞꯭丑小鸭꫞꧂', '123123中国人' from dual");

FreeSql.DbContext/DbSet/DbSetAsync.cs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,9 @@ async Task AddPrivAsync(TEntity data, bool isCheck, CancellationToken cancellati
8080
Attach(data);
8181
if (_db.Options.EnableAddOrUpdateNavigateList)
8282
await AddOrUpdateNavigateListAsync(data, true, null, cancellationToken);
83+
return;
8384
}
84-
return;
85+
break;
8586
}
8687
}
8788
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(data));
@@ -124,21 +125,22 @@ async public Task AddRangeAsync(IEnumerable<TEntity> data, CancellationToken can
124125
await AddOrUpdateNavigateListAsync(item, true, null, cancellationToken);
125126
return;
126127
default:
127-
foreach (var s in data)
128-
await AddPrivAsync(s, false, cancellationToken);
129-
return;
128+
if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1)
129+
{
130+
foreach (var s in data)
131+
await AddPrivAsync(s, false, cancellationToken);
132+
return;
133+
}
134+
break;
130135
}
131136
}
132-
else
133-
{
134-
//进入队列,等待 SaveChanges 时执行
137+
//进入队列,等待 SaveChanges 时执行
138+
foreach (var item in data)
139+
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item));
140+
AttachRange(data);
141+
if (_db.Options.EnableAddOrUpdateNavigateList)
135142
foreach (var item in data)
136-
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item));
137-
AttachRange(data);
138-
if (_db.Options.EnableAddOrUpdateNavigateList)
139-
foreach (var item in data)
140-
await AddOrUpdateNavigateListAsync(item, true, null, cancellationToken);
141-
}
143+
await AddOrUpdateNavigateListAsync(item, true, null, cancellationToken);
142144
}
143145

144146
async public Task SaveManyAsync(TEntity item, string propertyName, CancellationToken cancellationToken = default)

FreeSql.DbContext/DbSet/DbSetSync.cs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,9 @@ void AddPriv(TEntity data, bool isCheck)
7979
Attach(data);
8080
if (_db.Options.EnableAddOrUpdateNavigateList)
8181
AddOrUpdateNavigateList(data, true, null);
82+
return;
8283
}
83-
return;
84+
break;
8485
}
8586
}
8687
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(data));
@@ -127,21 +128,22 @@ public void AddRange(IEnumerable<TEntity> data)
127128
AddOrUpdateNavigateList(item, true, null);
128129
return;
129130
default:
130-
foreach (var s in data)
131-
AddPriv(s, false);
132-
return;
131+
if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1)
132+
{
133+
foreach (var s in data)
134+
AddPriv(s, false);
135+
return;
136+
}
137+
break;
133138
}
134139
}
135-
else
136-
{
137-
//进入队列,等待 SaveChanges 时执行
140+
//进入队列,等待 SaveChanges 时执行
141+
foreach (var item in data)
142+
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item));
143+
AttachRange(data);
144+
if (_db.Options.EnableAddOrUpdateNavigateList)
138145
foreach (var item in data)
139-
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item));
140-
AttachRange(data);
141-
if (_db.Options.EnableAddOrUpdateNavigateList)
142-
foreach (var item in data)
143-
AddOrUpdateNavigateList(item, true, null);
144-
}
146+
AddOrUpdateNavigateList(item, true, null);
145147
}
146148

147149
/// <summary>

FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1718,6 +1718,10 @@ public void ToDelete()
17181718
Assert.Equal(2, g.oracle.Select<ToDel1Pk>().Where(a => a.name.StartsWith("name")).ToDelete().ExecuteAffrows());
17191719
Assert.Equal(3, g.oracle.Select<ToDel1Pk>().Count());
17201720
Assert.Equal(3, g.oracle.Select<ToDel1Pk>().Where(a => a.name.StartsWith("nick")).Count());
1721+
Assert.Equal(2, g.oracle.Select<ToDel1Pk>().OrderBy(a => a.name).Limit(2).ToDelete().ExecuteAffrows());
1722+
Assert.Equal(1, g.oracle.Select<ToDel1Pk>().Count());
1723+
Assert.Equal(1, g.oracle.Select<ToDel1Pk>().Where(a => a.name.StartsWith("nick")).Count());
1724+
Assert.Equal("nick3", g.oracle.Select<ToDel1Pk>().ToList()[0].name);
17211725

17221726
g.oracle.Select<ToDel2Pk>().ToDelete().ExecuteAffrows();
17231727
Assert.Equal(0, g.oracle.Select<ToDel2Pk>().Count());

0 commit comments

Comments
 (0)