Мы используем ASP.NET Entity Framework Core для запросов к нашей базе данных MSSQL в нашем приложении веб-API. Иногда, когда у нас большой трафик, запрос к БД заканчивается этой ошибкой:
Время ожидания истекло. Время ожидания истекло до получения соединения из пула. Это могло произойти из-за того, что все соединения в пуле использовались и был достигнут максимальный размер пула.
Интересно, верен ли наш шаблон использования DbContext
и запросов, или мне не хватает какого-то шаблона использования/удаления, а ошибка вызвана некоторой утечкой памяти (после некоторых исследований, которые я прочитал, я не должен использовать использование, потому что время жизни управляется фреймворком ). Я следую документации...
Моя строка подключения:
"myConnection": "Server=xxx;Database=xxx;user id=xxx;password=xxx;Max Pool Size=200;Timeout=200;"
Мой Startup.cs
public void ConfigureServices(IServiceCollection services)
{
.....
// scoped context
services.AddDbContext<MyDbContext>(
options => options.UseSqlServer(this.Configuration.GetConnectionString("myConnection")));
}
затем в контроллерах я использовал 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();
}
Должен ли я использовать что-то вроде:
using (var context = this.Context)
{
return this.Context.tRealty.Where(x => x.id == id).FirstOrDefault();
}
Но я думаю, что это плохой шаблон, когда я использую внедрение зависимостей DbContext
.