Compare commits
No commits in common. "c353ae645b800cec432c285373daff543fa5af54" and "994a770fef4f4ced97f0f25fa60d192b73ffc3ac" have entirely different histories.
c353ae645b
...
994a770fef
|
|
@ -45,8 +45,8 @@ namespace IRaCIS.Core.SCP
|
||||||
.PropertiesAutowired().AsImplementedInterfaces();
|
.PropertiesAutowired().AsImplementedInterfaces();
|
||||||
|
|
||||||
|
|
||||||
//containerBuilder.RegisterType<HttpContextAccessor>().As<IHttpContextAccessor>().SingleInstance();
|
containerBuilder.RegisterType<HttpContextAccessor>().As<IHttpContextAccessor>().SingleInstance();
|
||||||
//containerBuilder.RegisterType<UserInfo>().As<IUserInfo>().InstancePerLifetimeScope();
|
containerBuilder.RegisterType<UserInfo>().As<IUserInfo>().InstancePerLifetimeScope();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,4 @@
|
||||||
using EntityFramework.Exceptions.SqlServer;
|
using IRaCIS.Core.Infra.EFCore;
|
||||||
using IRaCIS.Core.Domain.Share;
|
|
||||||
using IRaCIS.Core.Infra.EFCore;
|
|
||||||
using Medallion.Threading;
|
using Medallion.Threading;
|
||||||
using Medallion.Threading.SqlServer;
|
using Medallion.Threading.SqlServer;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
@ -13,25 +11,15 @@ namespace IRaCIS.Core.SCP
|
||||||
{
|
{
|
||||||
public static void AddEFSetup( this IServiceCollection services, IConfiguration configuration)
|
public static void AddEFSetup( this IServiceCollection services, IConfiguration configuration)
|
||||||
{
|
{
|
||||||
services.AddHttpContextAccessor();
|
//services.AddScoped<DbContext, IRaCISDBContext>();
|
||||||
services.AddScoped<IUserInfo, UserInfo>();
|
|
||||||
|
|
||||||
|
|
||||||
//这个注入没有成功--注入是没问题的,构造函数也只是支持参数就好,错在注入的地方不能写DbContext
|
//这个注入没有成功--注入是没问题的,构造函数也只是支持参数就好,错在注入的地方不能写DbContext
|
||||||
//Web程序中通过重用池中DbContext实例可提高高并发场景下的吞吐量, 这在概念上类似于ADO.NET Provider原生的连接池操作方式,具有节省DbContext实例化成本的优点
|
//Web程序中通过重用池中DbContext实例可提高高并发场景下的吞吐量, 这在概念上类似于ADO.NET Provider原生的连接池操作方式,具有节省DbContext实例化成本的优点
|
||||||
services.AddPooledDbContextFactory<IRaCISDBContext>(options =>
|
services.AddDbContext<IRaCISDBContext>(options =>
|
||||||
{
|
{
|
||||||
// 在控制台
|
|
||||||
//public static readonly ILoggerFactory MyLoggerFactory = LoggerFactory.Create(builder => { builder.AddConsole(); });
|
|
||||||
var logFactory = LoggerFactory.Create(builder => { builder.AddDebug(); });
|
|
||||||
|
|
||||||
options.UseSqlServer(configuration.GetSection("ConnectionStrings:RemoteNew").Value,
|
options.UseSqlServer(configuration.GetSection("ConnectionStrings:RemoteNew").Value,
|
||||||
contextOptionsBuilder => contextOptionsBuilder.EnableRetryOnFailure());
|
contextOptionsBuilder => contextOptionsBuilder.EnableRetryOnFailure());
|
||||||
|
|
||||||
options.UseLoggerFactory(logFactory);
|
|
||||||
|
|
||||||
options.UseExceptionProcessor();
|
|
||||||
|
|
||||||
options.EnableSensitiveDataLogging();
|
options.EnableSensitiveDataLogging();
|
||||||
|
|
||||||
options.AddInterceptors(new QueryWithNoLockDbCommandInterceptor());
|
options.AddInterceptors(new QueryWithNoLockDbCommandInterceptor());
|
||||||
|
|
@ -42,12 +30,6 @@ namespace IRaCIS.Core.SCP
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Register an additional context factory as a Scoped service, which gets a pooled context from the Singleton factory we registered above,
|
|
||||||
services.AddScoped<IRaCISDBScopedFactory>();
|
|
||||||
|
|
||||||
// Finally, arrange for a context to get injected from our Scoped factory:
|
|
||||||
services.AddScoped(sp => sp.GetRequiredService<IRaCISDBScopedFactory>().CreateDbContext());
|
|
||||||
|
|
||||||
//注意区分 easy caching 也有 IDistributedLockProvider
|
//注意区分 easy caching 也有 IDistributedLockProvider
|
||||||
services.AddSingleton<IDistributedLockProvider>(sp =>
|
services.AddSingleton<IDistributedLockProvider>(sp =>
|
||||||
{
|
{
|
||||||
|
|
@ -56,6 +38,7 @@ namespace IRaCIS.Core.SCP
|
||||||
return new SqlDistributedSynchronizationProvider(configuration.GetSection("ConnectionStrings:RemoteNew").Value);
|
return new SqlDistributedSynchronizationProvider(configuration.GetSection("ConnectionStrings:RemoteNew").Value);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//services.AddAssemblyTriggers(typeof(SubjectVisitImageDateTrigger).Assembly);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -55,8 +55,8 @@ namespace IRaCIS.Core.API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//containerBuilder.RegisterType<HttpContextAccessor>().As<IHttpContextAccessor>().SingleInstance();
|
containerBuilder.RegisterType<HttpContextAccessor>().As<IHttpContextAccessor>().SingleInstance();
|
||||||
//containerBuilder.RegisterType<UserInfo>().As<IUserInfo>().InstancePerLifetimeScope();
|
containerBuilder.RegisterType<UserInfo>().As<IUserInfo>().InstancePerLifetimeScope();
|
||||||
|
|
||||||
|
|
||||||
//注册hangfire任务 依赖注入
|
//注册hangfire任务 依赖注入
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,11 @@
|
||||||
using Castle.Core.Logging;
|
using Hangfire.SqlServer;
|
||||||
using EntityFramework.Exceptions.SqlServer;
|
|
||||||
using Hangfire.SqlServer;
|
|
||||||
using IRaCIS.Core.Application.Triggers;
|
using IRaCIS.Core.Application.Triggers;
|
||||||
using IRaCIS.Core.Domain.Share;
|
|
||||||
using IRaCIS.Core.Infra.EFCore;
|
using IRaCIS.Core.Infra.EFCore;
|
||||||
using Medallion.Threading;
|
using Medallion.Threading;
|
||||||
using Medallion.Threading.SqlServer;
|
using Medallion.Threading.SqlServer;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using StackExchange.Redis;
|
using StackExchange.Redis;
|
||||||
|
|
||||||
namespace IRaCIS.Core.API
|
namespace IRaCIS.Core.API
|
||||||
|
|
@ -18,28 +14,15 @@ namespace IRaCIS.Core.API
|
||||||
{
|
{
|
||||||
public static void AddEFSetup( this IServiceCollection services, IConfiguration configuration)
|
public static void AddEFSetup( this IServiceCollection services, IConfiguration configuration)
|
||||||
{
|
{
|
||||||
|
//services.AddScoped<DbContext, IRaCISDBContext>();
|
||||||
services.AddHttpContextAccessor();
|
|
||||||
services.AddScoped<IUserInfo, UserInfo>();
|
|
||||||
|
|
||||||
// First, register a pooling context factory as a Singleton service, as usual:
|
|
||||||
|
|
||||||
//这个注入没有成功--注入是没问题的,构造函数也只是支持参数就好,错在注入的地方不能写DbContext
|
//这个注入没有成功--注入是没问题的,构造函数也只是支持参数就好,错在注入的地方不能写DbContext
|
||||||
//Web程序中通过重用池中DbContext实例可提高高并发场景下的吞吐量, 这在概念上类似于ADO.NET Provider原生的连接池操作方式,具有节省DbContext实例化成本的优点
|
//Web程序中通过重用池中DbContext实例可提高高并发场景下的吞吐量, 这在概念上类似于ADO.NET Provider原生的连接池操作方式,具有节省DbContext实例化成本的优点
|
||||||
services.AddPooledDbContextFactory<IRaCISDBContext>(options =>
|
services.AddDbContext<IRaCISDBContext>(options =>
|
||||||
{
|
{
|
||||||
|
|
||||||
// 在控制台
|
|
||||||
//public static readonly ILoggerFactory MyLoggerFactory = LoggerFactory.Create(builder => { builder.AddConsole(); });
|
|
||||||
var logFactory = LoggerFactory.Create(builder => { builder.AddDebug(); });
|
|
||||||
|
|
||||||
options.UseSqlServer(configuration.GetSection("ConnectionStrings:RemoteNew").Value,
|
options.UseSqlServer(configuration.GetSection("ConnectionStrings:RemoteNew").Value,
|
||||||
contextOptionsBuilder => contextOptionsBuilder.EnableRetryOnFailure());
|
contextOptionsBuilder => contextOptionsBuilder.EnableRetryOnFailure());
|
||||||
|
|
||||||
options.UseLoggerFactory(logFactory);
|
|
||||||
|
|
||||||
options.UseExceptionProcessor();
|
|
||||||
|
|
||||||
options.EnableSensitiveDataLogging();
|
options.EnableSensitiveDataLogging();
|
||||||
|
|
||||||
options.AddInterceptors(new QueryWithNoLockDbCommandInterceptor());
|
options.AddInterceptors(new QueryWithNoLockDbCommandInterceptor());
|
||||||
|
|
@ -79,12 +62,6 @@ namespace IRaCIS.Core.API
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Register an additional context factory as a Scoped service, which gets a pooled context from the Singleton factory we registered above,
|
|
||||||
services.AddScoped<IRaCISDBScopedFactory>();
|
|
||||||
|
|
||||||
// Finally, arrange for a context to get injected from our Scoped factory:
|
|
||||||
services.AddScoped(sp => sp.GetRequiredService<IRaCISDBScopedFactory>().CreateDbContext());
|
|
||||||
|
|
||||||
//注意区分 easy caching 也有 IDistributedLockProvider
|
//注意区分 easy caching 也有 IDistributedLockProvider
|
||||||
services.AddSingleton<IDistributedLockProvider>(sp =>
|
services.AddSingleton<IDistributedLockProvider>(sp =>
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -269,7 +269,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
.WhereIf(visitSearchDTO.BeginAuditTime != null, t => t.Trial.QCProcessEnum==TrialQCProcess.SingleAudit? t.PreliminaryAuditTime>= visitSearchDTO.BeginAuditTime:
|
.WhereIf(visitSearchDTO.BeginAuditTime != null, t => t.Trial.QCProcessEnum==TrialQCProcess.SingleAudit? t.PreliminaryAuditTime>= visitSearchDTO.BeginAuditTime:
|
||||||
(t.Trial.QCProcessEnum == TrialQCProcess.DoubleAudit?t.ReviewAuditTime>= visitSearchDTO.BeginAuditTime:true))
|
(t.Trial.QCProcessEnum == TrialQCProcess.DoubleAudit?t.ReviewAuditTime>= visitSearchDTO.BeginAuditTime:true))
|
||||||
|
|
||||||
.WhereIf(visitSearchDTO.EndAuditTime != null, t => t.Trial.QCProcessEnum == TrialQCProcess.SingleAudit ? t.PreliminaryAuditTime <= visitSearchDTO.EndAuditTime :
|
.WhereIf(visitSearchDTO.EndAuditTime != null, t => t.Trial.QCProcessEnum == TrialQCProcess.SingleAudit ? t.ReviewAuditTime <= visitSearchDTO.EndAuditTime :
|
||||||
(t.Trial.QCProcessEnum == TrialQCProcess.DoubleAudit ? t.ReviewAuditTime <= visitSearchDTO.EndAuditTime : true))
|
(t.Trial.QCProcessEnum == TrialQCProcess.DoubleAudit ? t.ReviewAuditTime <= visitSearchDTO.EndAuditTime : true))
|
||||||
|
|
||||||
//.WhereIf(visitSearchDTO.SubmitState != null, t => t.SubmitState == visitSearchDTO.SubmitState)
|
//.WhereIf(visitSearchDTO.SubmitState != null, t => t.SubmitState == visitSearchDTO.SubmitState)
|
||||||
|
|
|
||||||
|
|
@ -24,38 +24,33 @@ using IRaCIS.Core.Infrastructure;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Infra.EFCore
|
namespace IRaCIS.Core.Infra.EFCore
|
||||||
{
|
{
|
||||||
|
|
||||||
public class IRaCISDBScopedFactory : IDbContextFactory<IRaCISDBContext>
|
|
||||||
{
|
|
||||||
|
|
||||||
private readonly IDbContextFactory<IRaCISDBContext> _pooledFactory;
|
|
||||||
private readonly IUserInfo _userInfo;
|
|
||||||
|
|
||||||
public IRaCISDBScopedFactory(IDbContextFactory<IRaCISDBContext> pooledFactory,IUserInfo userInfo)
|
|
||||||
{
|
|
||||||
_pooledFactory = pooledFactory;
|
|
||||||
_userInfo = userInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IRaCISDBContext CreateDbContext()
|
|
||||||
{
|
|
||||||
var context = _pooledFactory.CreateDbContext();
|
|
||||||
context._userInfo = _userInfo;
|
|
||||||
return context;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class IRaCISDBContext : DbContext
|
public class IRaCISDBContext : DbContext
|
||||||
{
|
{
|
||||||
public IUserInfo _userInfo;
|
public readonly IUserInfo _userInfo;
|
||||||
|
|
||||||
public readonly ILogger<IRaCISDBContext> _logger;
|
public readonly ILogger<IRaCISDBContext> _logger;
|
||||||
|
// 在控制台
|
||||||
|
//public static readonly ILoggerFactory MyLoggerFactory = LoggerFactory.Create(builder => { builder.AddConsole(); });
|
||||||
|
// 调试窗口
|
||||||
|
public static readonly ILoggerFactory MyLoggerFactory = LoggerFactory.Create(builder => { builder.AddDebug(); });
|
||||||
|
|
||||||
public IRaCISDBContext(DbContextOptions<IRaCISDBContext> options, ILogger<IRaCISDBContext> logger
|
public IRaCISDBContext(DbContextOptions<IRaCISDBContext> options, IUserInfo userInfo, ILogger<IRaCISDBContext> logger
|
||||||
|
|
||||||
) : base(options)
|
) : base(options)
|
||||||
{
|
{
|
||||||
_logger= logger;
|
_logger= logger;
|
||||||
|
_userInfo = userInfo;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//比数据库上下文构造函数先执行 不能构造函数注入的方式使用配置文件
|
||||||
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
|
{
|
||||||
|
optionsBuilder.UseLoggerFactory(MyLoggerFactory);
|
||||||
|
|
||||||
|
optionsBuilder.UseExceptionProcessor();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue