Как использовать одно подключение к БД для нескольких частичных представлений в asp.net mvc?

#asp.net #asp.net-mvc #asp.net-mvc-4

Вопрос:

Я хочу создать страницу профиля пользователя с 5 частичными представлениями, в которых,

  1. _viewHeaderProfile
  2. _индексированный
  3. _ Пользовательская почта
  4. _viewcontactдетали
  5. _образование

Но в этих частичных есть отдельное подключение к бд для каждого. Я хочу создать единое глобальное подключение к БД для всех частичных представлений.

_viewHeaderProfile

 public ActionResult HeaderProfile(){   usermodel = Uow.Users.Sp_GetUserProfile(id, WebSecurity.CurrentUserId);   return View("_viewHeaderProfile",Usermodel ); }  

_индексированный

 public ActionResult IndexPartial(){    IListlt;Postgt; post= Uow.Posts.GetAll(WebSecurity.CurrentUserId);    return View("_indexPartial",post);  }  

Все остальные частичные представления, как и выше, подключены из базы данных. Здесь снова и снова открывайте базу данных для каждого частичного представления.

Я хочу создать единое глобальное подключение к базе данных для всех частичных представлений.

Комментарии:

1. Как выглядит ваш Uow класс? Используете ли вы инъекцию зависимостей? Вы имеете в виду, что хотите использовать одно соединение для одного запроса, или все (одновременные) запросы должны совместно использовать одно соединение с базой данных?

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

3. На самом деле, это почти похоже на то, что вы хотите программировать в MVC, как если бы это было приложение WebForms. Это неправильно и приведет к многочисленным проблемам. Например, средство визуализации представлений не ожидает, что представления будут выполнять длительные операции блокировки. С другой стороны, ваш код выполняет несколько блокирующих запросов, когда он может легко загрузить все данные одним вызовом в действии контейнера. Если бы вы использовали, например, Entity Framework, один .Include(user=gt;user.Posts) из них загрузил бы пользователя и связанные с ним записи в одном запросе. Тот, который может быть асинхронным, чтобы избежать блокировки потоков

4. Да, я хочу, чтобы все (одновременные) запросы использовали одно соединение с базой данных для всех частичных представлений? @CodeCaster