小编Vít*_*ral的帖子

EF核心和大流量导致最大池大小达到错误

我们使用ASP.NET Entity Framework Core在我们的Web API应用程序中查询我们的MSSQL数据库.有时,当我们有大量流量时,查询到DB会以此错误结束:

超时已过期.从池中获取连接之前经过的超时时间.这可能是因为所有池连接都在使用中并且达到了最大池大小.

我想知道我们的使用DbContext和查询模式是否正确或者我是否缺少某些使用/ dispose模式和错误是由于某些内存泄漏引起的(在我读过一些研究之后我不应该使用因为生命周期由框架管理) .我正在关注文件 ......

我的connectionString:

"myConnection": "Server=xxx;Database=xxx;user id=xxx;password=xxx;Max Pool Size=200;Timeout=200;"
Run Code Online (Sandbox Code Playgroud)

我的Startup.cs

public void ConfigureServices(IServiceCollection services)
    {
    .....
    // scoped context            
    services.AddDbContext<MyDbContext>(
            options => options.UseSqlServer(this.Configuration.GetConnectionString("myConnection")));
    }
Run Code Online (Sandbox Code Playgroud)

然后在控制器中我通过依赖注入使用了dbcontext:

public class MyController : Controller
   public MyController (MyDbContext context)
    {
        this.Context = context;            
    }

    public ActionResult Get(int id)
    {
        // querying
        return this.Context.tRealty.Where(x=>x.id == id).FirstOrDefault();
    }
Run Code Online (Sandbox Code Playgroud)

我应该使用类似的东西:

using (var context = this.Context)
        {
            return this.Context.tRealty.Where(x => x.id == id).FirstOrDefault();
        }
Run Code Online (Sandbox Code Playgroud)

但我认为当我使用依赖注入时,这是一种糟糕的模式DbContext.

c# asp.net asp.net-web-api entity-framework-core .net-core

8
推荐指数
1
解决办法
8706
查看次数