Commit e430cd4d by lcx

大屏数据导入工作量效率优化

parent 95faf43c
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Z.EntityFramework.Extensions;
namespace Performance.Repository namespace Performance.Repository
{ {
...@@ -23,18 +23,22 @@ public TEntity DapperQueryFirst(string sql, object param) ...@@ -23,18 +23,22 @@ public TEntity DapperQueryFirst(string sql, object param)
{ {
return context.Database.GetDbConnection().QueryFirst<TEntity>(sql, param); return context.Database.GetDbConnection().QueryFirst<TEntity>(sql, param);
} }
public IEnumerable<TEntity> DapperQuery(string sql, object param) public IEnumerable<TEntity> DapperQuery(string sql, object param)
{ {
return context.Database.GetDbConnection().Query<TEntity>(sql, param); return context.Database.GetDbConnection().Query<TEntity>(sql, param);
} }
public IEnumerable<TEntity> DapperQuery(string sql, object param, int? commandTimeout = null) public IEnumerable<TEntity> DapperQuery(string sql, object param, int? commandTimeout = null)
{ {
return context.Database.GetDbConnection().Query<TEntity>(sql, param, commandTimeout: commandTimeout); return context.Database.GetDbConnection().Query<TEntity>(sql, param, commandTimeout: commandTimeout);
} }
public IEnumerable<T> DapperQuery<T>(string sql, object param) where T : class, new() public IEnumerable<T> DapperQuery<T>(string sql, object param) where T : class, new()
{ {
return context.Database.GetDbConnection().Query<T>(sql, param); return context.Database.GetDbConnection().Query<T>(sql, param);
} }
public T DapperQueryFirstOrDefault<T>(string sql, object param) public T DapperQueryFirstOrDefault<T>(string sql, object param)
{ {
return context.Database.GetDbConnection().QueryFirstOrDefault<T>(sql, param); return context.Database.GetDbConnection().QueryFirstOrDefault<T>(sql, param);
...@@ -79,11 +83,13 @@ public bool Remove(TEntity entity) ...@@ -79,11 +83,13 @@ public bool Remove(TEntity entity)
context.Set<TEntity>().Remove(entity); context.Set<TEntity>().Remove(entity);
return context.SaveChanges() > 0; return context.SaveChanges() > 0;
} }
public bool RemoveRange(params TEntity[] entities) public bool RemoveRange(params TEntity[] entities)
{ {
context.Set<TEntity>().RemoveRange(entities); context.Set<TEntity>().RemoveRange(entities);
return context.SaveChanges() > 0; return context.SaveChanges() > 0;
} }
public bool RemoveRange(Expression<Func<TEntity, bool>> exp) public bool RemoveRange(Expression<Func<TEntity, bool>> exp)
{ {
var query = CompileQuery(exp); var query = CompileQuery(exp);
...@@ -144,5 +150,42 @@ private TEntity CompileQuerySingle(Expression<Func<TEntity, bool>> exp) ...@@ -144,5 +150,42 @@ private TEntity CompileQuerySingle(Expression<Func<TEntity, bool>> exp)
var func = EF.CompileQuery((DbContext context, Expression<Func<TEntity, bool>> exps) => context.Set<TEntity>().FirstOrDefault(exp)); var func = EF.CompileQuery((DbContext context, Expression<Func<TEntity, bool>> exps) => context.Set<TEntity>().FirstOrDefault(exp));
return func(context, exp); return func(context, exp);
} }
#region Bulk
public void BulkInsert(IEnumerable<TEntity> entities)
{
EntityFrameworkManager.ContextFactory = factory => context;
context.Set<TEntity>().BulkInsert(entities);
context.BulkSaveChanges();
}
public async Task BulkInsertAsync(IEnumerable<TEntity> entities)
{
EntityFrameworkManager.ContextFactory = factory => context;
await context.Set<TEntity>().BulkInsertAsync(entities);
await context.BulkSaveChangesAsync();
}
public int DeleteFromQuery(Expression<Func<TEntity, bool>> exp)
{
return context.Set<TEntity>().Where(exp).DeleteFromQuery();
}
public void BulkDelete(IEnumerable<TEntity> entities)
{
EntityFrameworkManager.ContextFactory = factory => context;
context.Set<TEntity>().BulkDelete(entities);
context.BulkSaveChanges();
}
public async Task BulkDeleteAsync(IEnumerable<TEntity> entities)
{
EntityFrameworkManager.ContextFactory = factory => context;
await context.Set<TEntity>().BulkDeleteAsync(entities);
await context.BulkSaveChangesAsync();
}
#endregion Bulk
} }
} }
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
<PackageReference Include="MySql.Data" Version="8.0.15" /> <PackageReference Include="MySql.Data" Version="8.0.15" />
<PackageReference Include="MySql.Data.EntityFrameworkCore" Version="8.0.15" /> <PackageReference Include="MySql.Data.EntityFrameworkCore" Version="8.0.15" />
<PackageReference Include="Oracle.ManagedDataAccess.Core" Version="2.19.60" /> <PackageReference Include="Oracle.ManagedDataAccess.Core" Version="2.19.60" />
<PackageReference Include="Z.EntityFramework.Extensions.EFCore" Version="2.8.20" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
using Performance.Services.ExtractExcelService; using Performance.Services.ExtractExcelService;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
...@@ -204,10 +205,9 @@ public void ImportAllotData(int hospitalId, string filePath) ...@@ -204,10 +205,9 @@ public void ImportAllotData(int hospitalId, string filePath)
var years = data.Select(t => t.Year).Distinct(); var years = data.Select(t => t.Year).Distinct();
var months = data.Select(t => t.Month).Distinct(); var months = data.Select(t => t.Month).Distinct();
var historyData = hisimportdataRepository.GetEntities(t => t.HospitalId == hospitalId && years.Contains(t.Year) && months.Contains(t.Month) && t.Category == sheetName);
if (historyData != null && historyData.Any()) hisimportdataRepository.RemoveRange(historyData.ToArray());
hisimportdataRepository.AddRange(data.Where(t => t.Year != 0 && t.Month != 0).ToArray()); hisimportdataRepository.DeleteFromQuery(t => t.HospitalId == hospitalId && years.Contains(t.Year) && months.Contains(t.Month) && t.Category == sheetName);
hisimportdataRepository.BulkInsert(data.Where(t => t.Year != 0 && t.Month != 0));
} }
} }
catch (Exception ex) catch (Exception ex)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment