Где хранить DbContext в приложении asp.net? - PullRequest
1 голос
/ 08 февраля 2012

Мне кажется, что я сталкиваюсь с проблемой архитектуры, которую могу решить:

Сначала я занимаюсь разработкой веб-приложения с использованием кода платформы сущностей (v4.3 beta1).Также опубликовано несколько веб-сервисов.

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

В библиотеке «Данные» есть статическое свойство для хранения контекста:

namespace MMOrpheus.Lib
{
    public class Context
    {
        public static MMOrpheusDB MMO
        {
            get
            {
                if (HttpContext.Current != null && HttpContext.Current.Session["MMOEntities"] == null)
                {
                    HttpContext.Current.Session["MMOEntities"] = new MMOrpheusDB();
                }
                return HttpContext.Current.Session["MMOEntities"] as MMOrpheusDB;
            }
            set
            {
                if (HttpContext.Current != null)
                    HttpContext.Current.Session["MMOEntities"] = value;
            }
        }
    }
}

MMOrpheusDB наследуется от DbContext.

Так что проблема в том, что я как-то чувствую, что это неправильно.Помимо прочего, я не думаю, что этот класс Context должен использовать System.Web!

Есть предложения по организации этого проекта?

1 Ответ

2 голосов
/ 08 февраля 2012

Ответ на ваш вопрос не простой.

Прежде всего, я предлагаю вам использовать внедрение зависимостей и инверсию управления framework (StructureMap, Unity, ...).

Если вы собираетесь хранить DbContext , то с помощью IOC это будет очень просто. Вы можете определить время жизни вашего контекста . Я обычно иду с PerRequest время жизни. Один экземпляр DbContext для каждого веб-запроса . DBContext начинается с запроса и заканчивается им.

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

Если вы предпочитаете первый подход, ищите Проектирование, управляемое доменом, МОК, Единица работы, Шаблон репозитория и т. Д.

...