mirror of
https://gitee.com/ThingsGateway/ThingsGateway.git
synced 2025-10-20 18:51:28 +08:00
添加大数据写入方法
This commit is contained in:
@@ -47,12 +47,10 @@ public class BaseService<T> : IDataService<T>, IDisposable where T : class, new(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public Task<bool> DeleteAsync(IEnumerable<T> models)
|
public async Task<bool> DeleteAsync(IEnumerable<T> models)
|
||||||
{
|
{
|
||||||
if (models.FirstOrDefault() is IPrimaryIdEntity)
|
using var db = GetDB();
|
||||||
return DeleteAsync(models.Select(a => ((IPrimaryIdEntity)a).Id));
|
return await db.Deleteable<T>().In(models.ToList()).ExecuteCommandHasChangeAsync().ConfigureAwait(false);
|
||||||
else
|
|
||||||
return Task.FromResult(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
@@ -165,4 +163,6 @@ public class BaseService<T> : IDataService<T>, IDisposable where T : class, new(
|
|||||||
{
|
{
|
||||||
return DbContext.Db.GetConnectionScopeWithAttr<T>().CopyNew();
|
return DbContext.Db.GetConnectionScopeWithAttr<T>().CopyNew();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -103,4 +103,46 @@ public static class DbContext
|
|||||||
Console.WriteLine("【Sql执行时间】:" + DateTime.Now.ToDefaultDateTimeFormat());
|
Console.WriteLine("【Sql执行时间】:" + DateTime.Now.ToDefaultDateTimeFormat());
|
||||||
Console.WriteLine("【Sql语句】:" + msg + Environment.NewLine);
|
Console.WriteLine("【Sql语句】:" + msg + Environment.NewLine);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static async Task BulkCopyAsync<TITEM>(this SqlSugarClient db, List<TITEM> datas, int size) where TITEM : class, new()
|
||||||
|
{
|
||||||
|
switch (db.CurrentConnectionConfig.DbType)
|
||||||
|
{
|
||||||
|
case DbType.MySql:
|
||||||
|
case DbType.SqlServer:
|
||||||
|
case DbType.Sqlite:
|
||||||
|
case DbType.Oracle:
|
||||||
|
case DbType.PostgreSQL:
|
||||||
|
case DbType.Dm:
|
||||||
|
case DbType.MySqlConnector:
|
||||||
|
case DbType.Kdbndp:
|
||||||
|
await db.Fastest<TITEM>().PageSize(size).BulkCopyAsync(datas).ConfigureAwait(false);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
await db.Insertable(datas).PageSize(size).ExecuteCommandAsync().ConfigureAwait(false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
public static async Task BulkUpdateAsync<TITEM>(this SqlSugarClient db, List<TITEM> datas, int size) where TITEM : class, new()
|
||||||
|
{
|
||||||
|
switch (db.CurrentConnectionConfig.DbType)
|
||||||
|
{
|
||||||
|
case DbType.MySql:
|
||||||
|
case DbType.SqlServer:
|
||||||
|
case DbType.Sqlite:
|
||||||
|
case DbType.Oracle:
|
||||||
|
case DbType.PostgreSQL:
|
||||||
|
case DbType.Dm:
|
||||||
|
case DbType.MySqlConnector:
|
||||||
|
case DbType.Kdbndp:
|
||||||
|
await db.Fastest<TITEM>().PageSize(size).BulkUpdateAsync(datas).ConfigureAwait(false);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
await db.Updateable(datas).PageSize(size).ExecuteCommandAsync().ConfigureAwait(false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -329,8 +329,8 @@ internal sealed class ChannelService : BaseService<Channel>, IChannelService
|
|||||||
ManageHelper.CheckChannelCount(insertData.Count);
|
ManageHelper.CheckChannelCount(insertData.Count);
|
||||||
|
|
||||||
using var db = GetDB();
|
using var db = GetDB();
|
||||||
await db.Fastest<Channel>().PageSize(100000).BulkCopyAsync(insertData).ConfigureAwait(false);
|
await db.BulkCopyAsync(insertData, 100000).ConfigureAwait(false);
|
||||||
await db.Fastest<Channel>().PageSize(100000).BulkUpdateAsync(upData).ConfigureAwait(false);
|
await db.BulkUpdateAsync(upData, 100000).ConfigureAwait(false);
|
||||||
DeleteChannelFromCache();
|
DeleteChannelFromCache();
|
||||||
return channels.Select(a => a.Id).ToHashSet();
|
return channels.Select(a => a.Id).ToHashSet();
|
||||||
}
|
}
|
||||||
|
@@ -351,8 +351,8 @@ internal sealed class DeviceService : BaseService<Device>, IDeviceService
|
|||||||
ManageHelper.CheckDeviceCount(insertData.Count);
|
ManageHelper.CheckDeviceCount(insertData.Count);
|
||||||
|
|
||||||
using var db = GetDB();
|
using var db = GetDB();
|
||||||
await db.Fastest<Device>().PageSize(100000).BulkCopyAsync(insertData).ConfigureAwait(false);
|
await db.BulkCopyAsync(insertData, 100000).ConfigureAwait(false);
|
||||||
await db.Fastest<Device>().PageSize(100000).BulkUpdateAsync(upData).ConfigureAwait(false);
|
await db.BulkUpdateAsync(upData, 100000).ConfigureAwait(false);
|
||||||
DeleteDeviceFromCache();
|
DeleteDeviceFromCache();
|
||||||
return devices.Select(a => a.Id).ToHashSet();
|
return devices.Select(a => a.Id).ToHashSet();
|
||||||
}
|
}
|
||||||
|
@@ -217,9 +217,9 @@ internal sealed class VariableService : BaseService<Variable>, IVariableService
|
|||||||
|
|
||||||
var result = await db.UseTranAsync(async () =>
|
var result = await db.UseTranAsync(async () =>
|
||||||
{
|
{
|
||||||
await db.Fastest<Channel>().PageSize(100000).BulkCopyAsync(newChannels).ConfigureAwait(false);
|
await db.BulkCopyAsync(newChannels, 100000).ConfigureAwait(false);
|
||||||
await db.Fastest<Device>().PageSize(100000).BulkCopyAsync(newDevices).ConfigureAwait(false);
|
await db.BulkCopyAsync(newDevices, 100000).ConfigureAwait(false);
|
||||||
await db.Fastest<Variable>().PageSize(100000).BulkCopyAsync(newVariables).ConfigureAwait(false);
|
await db.BulkCopyAsync(newVariables, 100000).ConfigureAwait(false);
|
||||||
}).ConfigureAwait(false);
|
}).ConfigureAwait(false);
|
||||||
if (result.IsSuccess)//如果成功了
|
if (result.IsSuccess)//如果成功了
|
||||||
{
|
{
|
||||||
@@ -486,8 +486,8 @@ internal sealed class VariableService : BaseService<Variable>, IVariableService
|
|||||||
var insertData = variables.Where(a => !a.IsUp).ToList();
|
var insertData = variables.Where(a => !a.IsUp).ToList();
|
||||||
ManageHelper.CheckVariableCount(insertData.Count);
|
ManageHelper.CheckVariableCount(insertData.Count);
|
||||||
using var db = GetDB();
|
using var db = GetDB();
|
||||||
await db.Fastest<Variable>().PageSize(100000).BulkCopyAsync(insertData).ConfigureAwait(false);
|
await db.BulkCopyAsync(insertData, 100000).ConfigureAwait(false);
|
||||||
await db.Fastest<Variable>().PageSize(100000).BulkUpdateAsync(upData).ConfigureAwait(false);
|
await db.BulkUpdateAsync(upData, 100000).ConfigureAwait(false);
|
||||||
_dispatchService.Dispatch(new());
|
_dispatchService.Dispatch(new());
|
||||||
DeleteVariableCache();
|
DeleteVariableCache();
|
||||||
return variables.Select(a => a.Id).ToHashSet();
|
return variables.Select(a => a.Id).ToHashSet();
|
||||||
|
Reference in New Issue
Block a user