批量更新修改
parent
ca933d25a8
commit
7c1fdde2f3
|
@ -11,10 +11,12 @@ namespace IRaCIS.Application.Services
|
||||||
public class TestService : BaseService
|
public class TestService : BaseService
|
||||||
{
|
{
|
||||||
private readonly IRepository<Dictionary> _dicRepository;
|
private readonly IRepository<Dictionary> _dicRepository;
|
||||||
|
private readonly IRepository<Trial> _trialRepository;
|
||||||
|
|
||||||
public TestService(IRepository<Dictionary> dicRepository)
|
public TestService(IRepository<Dictionary> dicRepository,IRepository<Trial> trialRepository)
|
||||||
{
|
{
|
||||||
_dicRepository = dicRepository;
|
_dicRepository = dicRepository;
|
||||||
|
_trialRepository = trialRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
|
@ -25,11 +27,22 @@ namespace IRaCIS.Application.Services
|
||||||
var c = _dicRepository.Where(t => t.ParentId != null).Select(t => t.MappedValue).First();
|
var c = _dicRepository.Where(t => t.ParentId != null).Select(t => t.MappedValue).First();
|
||||||
CultureInfo culture = CultureInfo.CurrentUICulture;
|
CultureInfo culture = CultureInfo.CurrentUICulture;
|
||||||
|
|
||||||
var dd= _dicRepository.UpdatePartialFields(Guid.Parse("8a90c96e-0776-4f7b-82a6-18933d339584"),
|
//var dd= _dicRepository.UpdatePartialFields(Guid.Parse("8a90c96e-0776-4f7b-82a6-18933d339584"),
|
||||||
u => new Dictionary() { ParentId = null, Code = "test" }, true).Result;
|
// u => new Dictionary() { ParentId = null, Code = "test" }, true).Result;
|
||||||
|
|
||||||
|
var aaaa = _dicRepository.BatchDeleteAsync(t => t.Id == Guid.Empty).Result;
|
||||||
|
|
||||||
|
//var ggggg = _dicRepository.UpdateFromQueryAsync(t => t.ParentId == Guid.Parse("8a90c96e-0776-4f7b-82a6-18933d339584"), u=>new Dictionary(){Code = "test"}).Result;
|
||||||
|
|
||||||
|
var ddd = _dicRepository.BatchUpdateAsync(t => t.Id == Guid.Parse("8a90c96e-0776-4f7b-82a6-18933d339584"),
|
||||||
|
u => new Dictionary() { ParentId = null, Code = "test" }).Result;
|
||||||
|
|
||||||
|
|
||||||
var d = _dicRepository.UpdateFromDTOAsync(new AddOrEditBasicDic() { Id = Guid.Parse("60d86683-c33b-4349-b672-08da1e91b622"), ParentId = null, ChildGroup = null, Code = null }, true, true).Result;
|
var aaaaa= _trialRepository.BatchUpdateAsync(t => t.Id == Guid.Empty,
|
||||||
|
u => new Trial { TrialCode = "test" }).Result;
|
||||||
|
|
||||||
|
|
||||||
|
//var d = _dicRepository.UpdateFromDTOAsync(new AddOrEditBasicDic() { Id = Guid.Parse("60d86683-c33b-4349-b672-08da1e91b622"), ParentId = null, ChildGroup = null, Code = null }, true, true).Result;
|
||||||
var a = 123;
|
var a = 123;
|
||||||
|
|
||||||
var b = _localizer["test{0}", "测试"];
|
var b = _localizer["test{0}", "测试"];
|
||||||
|
|
|
@ -37,6 +37,8 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
optionsBuilder.UseLoggerFactory(MyLoggerFactory)
|
optionsBuilder.UseLoggerFactory(MyLoggerFactory)
|
||||||
.ReplaceService<IModelCacheKeyFactory, DynamicModelCacheKeyFactoryDesignTimeSupport>();
|
.ReplaceService<IModelCacheKeyFactory, DynamicModelCacheKeyFactoryDesignTimeSupport>();
|
||||||
|
|
||||||
|
optionsBuilder.UseBatchEF_MSSQL();
|
||||||
|
|
||||||
//var config = new ConfigurationBuilder()
|
//var config = new ConfigurationBuilder()
|
||||||
// .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true).Build();
|
// .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true).Build();
|
||||||
//connectionString = config.GetSection("ConnectionStrings:RemoteNew").Value;
|
//connectionString = config.GetSection("ConnectionStrings:RemoteNew").Value;
|
||||||
|
@ -74,7 +76,6 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//modelBuilder.Entity<User>().Property(t => t.FullName) .HasDefaultValueSql("[LastName] + ' / ' + [FirstName]");
|
//modelBuilder.Entity<User>().Property(t => t.FullName) .HasDefaultValueSql("[LastName] + ' / ' + [FirstName]");
|
||||||
//modelBuilder.Entity<User>().Property(e => e.FullName).Metadata.SetBeforeSaveBehavior(PropertySaveBehavior.Ignore);
|
//modelBuilder.Entity<User>().Property(e => e.FullName).Metadata.SetBeforeSaveBehavior(PropertySaveBehavior.Ignore);
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
|
||||||
public void Configure(EntityTypeBuilder<Dictionary> builder)
|
public void Configure(EntityTypeBuilder<Dictionary> builder)
|
||||||
{
|
{
|
||||||
builder.Property(e => e.MappedValue).Metadata.SetBeforeSaveBehavior(PropertySaveBehavior.Ignore);
|
builder.Property(e => e.MappedValue).Metadata.SetBeforeSaveBehavior(PropertySaveBehavior.Ignore);
|
||||||
|
builder.Property(e => e.MappedValue).Metadata.SetAfterSaveBehavior(PropertySaveBehavior.Ignore);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,12 +20,14 @@
|
||||||
<PackageReference Include="AutoMapper.Collection" Version="7.0.1" />
|
<PackageReference Include="AutoMapper.Collection" Version="7.0.1" />
|
||||||
<PackageReference Include="AutoMapper.Collection.EntityFrameworkCore" Version="7.1.3" />
|
<PackageReference Include="AutoMapper.Collection.EntityFrameworkCore" Version="7.1.3" />
|
||||||
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="8.1.1" />
|
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="8.1.1" />
|
||||||
|
<PackageReference Include="EFCore.BulkExtensions" Version="6.4.4" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Abstractions" Version="2.2.0" />
|
<PackageReference Include="Microsoft.AspNetCore.Mvc.Abstractions" Version="2.2.0" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
|
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.1" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.1" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.1" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.1" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="6.0.0" />
|
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="6.0.0" />
|
||||||
<PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="6.13.6" />
|
<PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="6.13.6" />
|
||||||
|
<PackageReference Include="Zack.EFCore.Batch.MSSQL_NET6" Version="6.0.12" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -21,6 +21,7 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
.MakeGenericMethod(entityData.ClrType);
|
.MakeGenericMethod(entityData.ClrType);
|
||||||
var filter = methodToCall.Invoke(null, new object[] { });
|
var filter = methodToCall.Invoke(null, new object[] { });
|
||||||
entityData.SetQueryFilter((LambdaExpression)filter);
|
entityData.SetQueryFilter((LambdaExpression)filter);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static LambdaExpression GetSoftDeleteFilter<TEntity>()
|
private static LambdaExpression GetSoftDeleteFilter<TEntity>()
|
||||||
|
|
|
@ -22,6 +22,12 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
|
|
||||||
Task<TEntity> UpdatePartialFields(Guid id, Expression<Func<TEntity, TEntity>> updateFactory, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify);
|
Task<TEntity> UpdatePartialFields(Guid id, Expression<Func<TEntity, TEntity>> updateFactory, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify);
|
||||||
|
|
||||||
|
|
||||||
|
Task<bool> BatchUpdateAsync(Expression<Func<TEntity, bool>> where,
|
||||||
|
Expression<Func<TEntity, TEntity>> updateFactory);
|
||||||
|
|
||||||
|
Task<bool> BatchDeleteAsync(Expression<Func<TEntity, bool>> deleteFilter);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface ICommandRepository<TEntity, TKey> where TEntity : class
|
public interface ICommandRepository<TEntity, TKey> where TEntity : class
|
||||||
|
|
|
@ -12,6 +12,7 @@ using IRaCIS.Core.Domain.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.ChangeTracking;
|
using Microsoft.EntityFrameworkCore.ChangeTracking;
|
||||||
using AutoMapper.QueryableExtensions;
|
using AutoMapper.QueryableExtensions;
|
||||||
|
using EFCore.BulkExtensions;
|
||||||
using IRaCIS.Core.Infrastructure;
|
using IRaCIS.Core.Infrastructure;
|
||||||
using IRaCIS.Core.Infrastructure.Extention;
|
using IRaCIS.Core.Infrastructure.Extention;
|
||||||
using Microsoft.Data.SqlClient;
|
using Microsoft.Data.SqlClient;
|
||||||
|
@ -511,6 +512,65 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
return await _dbSet.IgnoreQueryFilters().Where(where).UpdateFromQueryAsync(updateFactory) > 0;
|
return await _dbSet.IgnoreQueryFilters().Where(where).UpdateFromQueryAsync(updateFactory) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<bool> BatchDeleteAsync(Expression<Func<TEntity, bool>> deleteFilter)
|
||||||
|
{
|
||||||
|
return await _dbSet.IgnoreQueryFilters().Where(deleteFilter).BatchDeleteAsync() > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<bool> BatchUpdateAsync(Expression<Func<TEntity, bool>> where,
|
||||||
|
Expression<Func<TEntity, TEntity>> updateFactory)
|
||||||
|
{
|
||||||
|
|
||||||
|
return await _dbSet.IgnoreQueryFilters().Where(where).BatchUpdateAsync(updateFactory) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 杨中科 test 有问题 对于guid? 赋值null的时候
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="where"></param>
|
||||||
|
/// <param name="updateFactory"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
//public async Task<bool> BatchUpdateAsync(Expression<Func<TEntity, bool>> where,
|
||||||
|
// Expression<Func<TEntity, TEntity>> updateFactory)
|
||||||
|
//{
|
||||||
|
// var builder = _dbContext.BatchUpdate<TEntity>();
|
||||||
|
|
||||||
|
// Func<TEntity, TEntity> func = updateFactory.Compile();
|
||||||
|
|
||||||
|
// List<PropertyInfo> list = ((MemberInitExpression)updateFactory.Body).Bindings.Select<MemberBinding, string>((Func<MemberBinding, string>)(_param1 => _param1.Member.Name)).Select<string, PropertyInfo>((Func<string, PropertyInfo>)(_param1 => (PropertyInfo)typeof(TEntity).GetProperty(_param1, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))).ToList<PropertyInfo>();
|
||||||
|
|
||||||
|
// TEntity applyObj = func(new TEntity());
|
||||||
|
|
||||||
|
// foreach (PropertyInfo prop in list)
|
||||||
|
// {
|
||||||
|
// var propName = prop.Name;
|
||||||
|
// var value = prop.GetValue(applyObj);
|
||||||
|
|
||||||
|
|
||||||
|
// builder.Set(propName, value?? DBNull.Value);
|
||||||
|
|
||||||
|
// //PropertyInfo property = typeof(TEntity).GetProperty(prop.Name);
|
||||||
|
// //Type propertyType = property.PropertyType;
|
||||||
|
// //ParameterExpression parameterExpression = Expression.Parameter(typeof(TEntity));
|
||||||
|
// //Type delegateType = typeof(Func<,>).MakeGenericType(typeof(TEntity), propertyType);
|
||||||
|
// //LambdaExpression nameExpr = Expression.Lambda(delegateType, (Expression)Expression.MakeMemberAccess((Expression)parameterExpression, (MemberInfo)property), parameterExpression);
|
||||||
|
// //Expression expression = (Expression)Expression.Constant(value);
|
||||||
|
|
||||||
|
// //expression = (Expression)Expression.Convert(expression, propertyType);
|
||||||
|
|
||||||
|
// //LambdaExpression valueExpr = Expression.Lambda(delegateType, expression, parameterExpression);
|
||||||
|
|
||||||
|
|
||||||
|
// //builder.Set< >(Func<TEntity, c> nameExpr, valueExpr);
|
||||||
|
|
||||||
|
// }
|
||||||
|
// return await builder.Where(where).ExecuteAsync()>0;
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue