mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 10:42:52 +08:00
parent
4d23d331bc
commit
b320d084fa
@ -10,7 +10,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<Version>3.2.601</Version>
|
||||
<Version>3.2.602</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -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");
|
||||
|
@ -80,9 +80,10 @@ namespace FreeSql
|
||||
Attach(data);
|
||||
if (_db.Options.EnableAddOrUpdateNavigateList)
|
||||
await AddOrUpdateNavigateListAsync(data, true, null, cancellationToken);
|
||||
}
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(data));
|
||||
Attach(data);
|
||||
@ -124,13 +125,15 @@ namespace FreeSql
|
||||
await AddOrUpdateNavigateListAsync(item, true, null, cancellationToken);
|
||||
return;
|
||||
default:
|
||||
if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1)
|
||||
{
|
||||
foreach (var s in data)
|
||||
await AddPrivAsync(s, false, cancellationToken);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//进入队列,等待 SaveChanges 时执行
|
||||
foreach (var item in data)
|
||||
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item));
|
||||
@ -139,7 +142,6 @@ namespace FreeSql
|
||||
foreach (var item in data)
|
||||
await AddOrUpdateNavigateListAsync(item, true, null, cancellationToken);
|
||||
}
|
||||
}
|
||||
|
||||
async public Task SaveManyAsync(TEntity item, string propertyName, CancellationToken cancellationToken = default)
|
||||
{
|
||||
|
@ -79,9 +79,10 @@ namespace FreeSql
|
||||
Attach(data);
|
||||
if (_db.Options.EnableAddOrUpdateNavigateList)
|
||||
AddOrUpdateNavigateList(data, true, null);
|
||||
}
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(data));
|
||||
Attach(data);
|
||||
@ -127,13 +128,15 @@ namespace FreeSql
|
||||
AddOrUpdateNavigateList(item, true, null);
|
||||
return;
|
||||
default:
|
||||
if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1)
|
||||
{
|
||||
foreach (var s in data)
|
||||
AddPriv(s, false);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//进入队列,等待 SaveChanges 时执行
|
||||
foreach (var item in data)
|
||||
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item));
|
||||
@ -142,7 +145,6 @@ namespace FreeSql
|
||||
foreach (var item in data)
|
||||
AddOrUpdateNavigateList(item, true, null);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 保存实体的指定 ManyToMany/OneToMany 导航属性(完整对比)<para></para>
|
||||
|
@ -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());
|
||||
|
Loading…
x
Reference in New Issue
Block a user