Это нормально для использования контекста EntityFramework - PullRequest
1 голос
/ 18 апреля 2011

В моем DAL я в настоящее время использую это в базовом классе:

protected static MyCMSEntities MyCMSDb
{
    get { return new MyCMSEntities(ConfigurationManager.ConnectionStrings["MyCMSEntities"].ConnectionString); }
}

и вызываю так из подкласса:

public static bool Add(ContentFAQ newContent)
{
    MyCMSEntities db = MyCMSDb;
    newContent.DateModified = DateTime.Now;
    newContent.OwnerUserId = LoginManager.CurrentUser.Id;
    db.ContentFAQ.AddObject(newContent);
    return db.SaveChanges() > 0;
}

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

Правильно ли я и что более важно, хорошо для вебаприложение?

Спасибо.

1 Ответ

3 голосов
/ 18 апреля 2011

Вы правы в использовании нового контекста для каждого веб-вызова - но почему это запутывание? Я бы порекомендовал удалить это косвенное обращение со статическим свойством (затрудняет понимание кода), а также с использованием блока using, так как контекст одноразовый:

public static bool Add(ContentFAQ newContent)
{
    using(var db = new MyCMSEntities())
    {
      newContent.DateModified = DateTime.Now;
      newContent.OwnerUserId = LoginManager.CurrentUser.Id;
      db.ContentFAQ.AddObject(newContent);
      return db.SaveChanges() > 0;
    }
}

Также конструктор по умолчанию для контекста должен использовать строку подключения по умолчанию, которая является правильной, если вы не изменили ее в своей конфигурации (в противном случае просто добавьте ее обратно).

...