Пулы DbContext и Connection

В приложении, которое я унаследовал, есть это в базовом контроллере, который наследует каждый другой контроллер в приложении.

public BaseController() { db = new MyDbContext(); db.Database.Log = s => Debug.Write(s); } public MyDbContext() : base("name=MyDbContext") { // hack to force Visual Studio to deploy the Entityframework.SqlServer package var instance = SqlProviderServices.Instance; } 

В связи с тем, как было разработано приложение, по запросу создается по меньшей мере 2 контекста. (Это приложение MVC, и есть вызов HomeController на каждой странице плюс любые другие контроллеры, вызываемые для определенной страницы.)

Мой вопрос в том, когда DbContext создает соединение с SQL Server? Это сразу, когда контекст создан или только когда выполняется запрос?

Если это первый, то я буду использовать в два раза больше соединений с SQL-сервером, чем это необходимо, и если это последний, то это, вероятно, не слишком большая проблема.

Я не думаю, что смогу реорганизовать это в ближайшем будущем, конечно, не без оснований. С какими потенциальными ловушками этого дизайна я должен знать?

Сущность Framework 6.1.3

Поскольку вы не пытаетесь создать и передать соединение самостоятельно в своем конструкторе контекста, тогда да, как говорят другие, EF будет получать / освобождать соединения из пула соединений по мере необходимости, а не когда он будет создан.

Обратите внимание на эту цитату из документации EF:

связи

По умолчанию контекст управляет соединениями с базой данных. Контекст открывает и закрывает соединения по мере необходимости. Например, контекст открывает соединение для выполнения запроса, а затем закрывает соединение, когда все результирующие наборы были обработаны.

Бывают случаи, когда вы хотите иметь больше контроля, когда соединение открывается и закрывается. Например, при работе с SQL Server Compact открытие и закрытие одного и того же соединения дорого. Вы можете управлять этим процессом вручную, используя свойство Connection.

Для получения дополнительной информации см. Следующие ссылки:

https://msdn.microsoft.com/en-us/data/jj729737

https://msdn.microsoft.com/en-us/data/dn456849

Entity Framework следует принципу Open late and close early. Таким образом, он только открывает соединение, когда ему тоже нужно, IE для материализации запроса, затем он закрывает его, как только это возможно.

Если вы можете, вы должны перейти к одному экземпляру контекста для каждого запроса. Это также сохраняет все, что происходит во время запроса в одной транзакции. Вы можете сделать это довольно легко, если вы используете контейнер Injection Dependency для создания экземпляров ваших контроллеров.

Соединение открывается только при выполнении запроса. Пул соединений управляется классами ADO.NET (SqlConnection). Наличие нескольких экземпляров DbContext для каждого запроса в порядке и иногда необходимо. У вас не будет в два раза больше соединений.

  • Не удалось подключиться к базе данных. Проверьте правильность строки подключения и конструктор DbContext
  • Пропустить параметры через EF, которые будут доступны в триггерах SQL Server (и пуле соединений?)
  • C # SQL-запрос блокирует память сервера
  • Как преобразовать свойства EF в вычисленные столбцы SQL Server?
  • Как я могу сгенерировать SQL для создания базы данных из моей модели в Visual Studio, когда не использую MS SQL?
  • Есть ли способ реализовать запрос с TSQL Option в Entity Framework
  • Entity Framework генерирует неэффективный выбор при использовании функции поиска ()
  • Оператор Insert конфликтует с ограничением FOREIGN KEY. Основы Entity Framework
  • Async / Await с Entity Framework 6.1.1 и олицетворением
  • СУБД СУБД СУБД СУЩЕСТВУЮЩЕЙ СРЕДЫ - произошла связанная с сетью или специфичная для экземпляра ошибка при установлении соединения с SQL Server
  • SQL Принудительная настройка параметров от Azure
  • Interesting Posts

    Несколько запросов к одному запросу

    Как проверить результат запроса linq в базе данных Sql Server для данных уже существует или нет?

    Как вставить параметр данных DbGeography в базу данных через ado.net

    SQL-запрос для поиска первой строки с отсутствующей последовательностью (префикс + no)

    Выберите одно поле несколько раз с несколькими критериями

    Код ошибки операционной системы 5 (Доступ запрещен.), Когда объемная вставка

    Как показать последнюю запись для одного столбца, которые имеют повторяющееся значение или нет, с указанием количества раз, сколько раз отображается значение столбца

    ВСТАВИТЬ, если НЕ СУЩЕСТВУЕТ, но УДАЛИТЬ, если он СУЩЕСТВУЕТ

    Найдите строки, в которых значения двух одинаковых столбцов повторяются

    Инструкция TSQL – MERGE с составным ключом

    Совокупная сумма SQL суммирует только чистые отрицательные строки

    Как подключиться к MS SQL Server в Objective-C / Cocoa на Mac?

    Шифрование из приложения c #

    Использование переменных в скрипте Oracle

    Управление часовыми поясами и временем нахождения в приложении?

    Давайте будем гением компьютера.