2015-03-10 5 views
0

У меня есть страница, которая запускает два запроса Ajax при запуске (они должны быть объединены, я знаю, но меня интересует, что такое правильное решение, кроме этого) - каждый из них запрашивает контроллер WebAPI для получения данных, которые возвращаются через JSON.Несколько запросов Ajax, использующих соединение с базой данных (C#)

Индивидуально они отлично работают, но одновременное отключение обоих запросов Ajax приводит к тому, что известная ошибка «есть уже открытый datareader, связанный с этой командой».

Это связано с тем, что я установил одно соединение с базой данных в Application_Start и использовал это соединение для всех контроллеров. Если я создаю новое соединение в каждом контроллере, он работает нормально.

Итак, мой вопрос: правильно ли создавать новое соединение с базой данных в каждом контроллере, или есть ли какая-то опция блокировки/совместного использования одного соединения?

ответ

2

Не используйте одно соединение через приложение.


Создайте и откройте соединение с базой данных как можно позже и закройте как можно раньше. Это должно быть правило.

Что касается WebAPI, вы должны открыть соединение по каждому запросу, получить данные, закрыть соединение и вернуть данные клиенту. Пусть объединение соединений ADO.Net заботится о ваших подключениях.

SQL Server Connection Pooling (ADO.NET)

+1

Супер - спасибо! –