При какой именно операции Entity Framework открывает и закрывает соединение с базой данных? - PullRequest
1 голос
/ 02 августа 2020

Итак, здесь - это ссылка на тот же вопрос, который задавали около 11 лет go. Он старый и неясно, что я ищу.

Когда именно EF открывает и закрывает соединение с базой данных?

Открывается ли он, когда мы создаем объект DbContext, или он открывается, когда мы впервые делаем запрос?

Он закрывается, когда мы нажимаем SaveChanges(), или он закрывается, когда мы либо вручную удаляем объект, либо используем его внутри using() {}?

Я ушел через интернет-ресурсы Microsoft и не смог найти то, что искал.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

Базовое соединение открывается прямо перед выполнением запроса или без запроса и закрывается сразу после его выполнения или до тех пор, пока выполняется транзакция. DbContext должен быть удален должным образом. Вот как вы извлекаете максимальную пользу из пула подключений. Это то, что мы все должны были делать, когда королем была ADO. NET.

0 голосов
/ 02 августа 2020

Вы можете использовать любой из них.

Используйте using (). Он откроется в начале блока using () и будет удален в конце блока using ().

using (var db = new YourContext())
{
    db.User.Add(user);
    db.SaveChanges();
}

Внедрение зависимости в Startup.cs. Он открывается после вызова контроллера и удаляется после вызова функции.

Startup.cs

services.AddDbContext<YourContext>(options =>
{
    options.UseSqlServer("your connection string");
    options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
});

HomeController.cs

private readonly YourContext _db;
public HomeController(YourContext db)
{
    _db = db;
}
public IActionResult Index()
{
   var users = _db.Users.AsQueryable();
   return View(users);
}
...