MVC ASP.NET, ObjectContext и Ajax. Странное поведение

Я создавал веб-приложение в mvc asp.net. У меня есть три разных проекта / решения:

  • Одно решение содержит модель в EF (DAL) и все методы для добавления, обновления, удаления и запроса объектов в модели, контекст объекта управляется здесь для каждого запроса.
  • Другое решение содержит систему управления контентом, в которой авторизованные пользователи вставляют, удаляют, обновляют и получают доступ к объектам через упомянутый ранее DAL.
  • И последнее решение содержит веб-страницу, к которой обращаются все пользователи (тысячи пользователей в день), и на которой выполняются только операции выбора, без обновления, вставки или удаления здесь.

Все выборы выполняются в соответствии с упомянутым ранее DAL (первое решение). Проблема здесь в том, что я не уверен, является ли ObjectContext продолжительностью жизни HttpContext лучшим решением.

У меня много вызовов ajax в моем веб-приложении, и я не уверен, может ли httpcontext повлиять на производительность приложения. Я заметил, что в некоторых случаях, особенно когда кто-то работает в диспетчере контента, вставляя, обновляя или удаляя, когда вы пытаетесь щелкнуть любую ссылку пользовательского веб-приложения (веб-приложение, к которому имеет доступ любой пользователь - третий, о котором я упоминал ранее) веб-страница зависает, и она остается зависшей при передаче данных. Чтобы остановить это поведение, вы должны остановиться и обновить страницу или несколько раз щелкнуть ссылку. Простите за плохой английский. Надеюсь, вы поняли и помогли мне решить эту проблему. Спасибо заранее.


person fabianadipolo    schedule 21.03.2010    source источник
comment
Было бы намного легче читать, если бы вы могли разбить свой вопрос на несколько абзацев.   -  person Ray Lu    schedule 21.03.2010


Ответы (1)


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

person Sander Rijken    schedule 21.03.2010
comment
Сандер, спасибо, что нашли время ответить. Я реализовал шаблон репозитория, в котором ObjectContext создается для каждого HttpRequest. Когда вы говорите, что я должен создавать ObjectContext для каждой операции, вы имеете в виду, что для каждого выбора, обновления, вставки мне нужно создавать ObjectContext? Обратите внимание, что на одной странице у меня есть несколько запросов. например, домашняя страница выполняет множественный выбор в форме запроса ajax: GetArticles, GetEvents, GetPreview и так далее, все эти методы вызываются в одном запросе. Тогда с вашим подходом мне нужно создать objectContext для каждого? - person fabianadipolo; 21.03.2010
comment
Когда это доступ только для чтения, не помешает сохранить его дольше. Нет ничего лучше в том, чтобы держать его подольше. Соединение с БД будет закрыто после каждого запроса и снова открываться для каждого последующего запроса. При обновлении базы данных вам действительно нужно избавиться от контекста после сохранения изменений, потому что результатам последующих выборок нельзя доверять. - person Sander Rijken; 21.03.2010