我们使用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.