从.NET Core MVC调用Web API遇ApplicationDbContext池化错误,求解决
解决ApplicationDbContext无法池化的错误
这个错误的核心原因是:DbContext池化机制要求上下文类必须有且仅有一个接受单一DbContextOptions<ApplicationDbContext>类型参数的公共构造函数,如果存在多个构造函数,或者构造函数参数不符合要求,就会触发该异常。
以下是具体解决步骤:
调整ApplicationDbContext的构造函数
确保只保留一个符合要求的公共构造函数,移除多余的构造函数(比如无参构造函数、带其他参数的构造函数),示例代码如下:public class ApplicationDbContext : DbContext { // 仅保留这一个公共构造函数 public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } // 删除其他构造函数,比如: // public ApplicationDbContext() { } // public ApplicationDbContext(string connectionString) { } }若无法移除多余构造函数,可关闭DbContext池化(不推荐,会损失性能)
如果因业务需求必须保留多个构造函数,可以在服务注册时显式关闭池化,将上下文的生命周期改为Scoped:// .NET 6+ Program.cs 示例 builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")), optionsLifetime: ServiceLifetime.Scoped, contextLifetime: ServiceLifetime.Scoped);确认服务注册的正确性(使用池化的场景)
如果要启用池化提升性能,确保使用AddDbContextPool方法注册服务:// .NET 6+ Program.cs 启用池化的正确方式 builder.Services.AddDbContextPool<ApplicationDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
内容的提问来源于stack exchange,提问作者JagathNalin
相关产品推荐
相关产品推荐

