ObjectContext и DbContext в Entity Framework

Я использую DbContext класс в коде, который я создаю, который основан на шаблонах разработки универсальных репозиториев и единиц работы. (Я следую указаниям здесь.) Работая над этим проектом, я столкнулся с ObjectContext учебный класс.

Я прочитал довольно много постов, которые обсуждают ObjectContextпротивDbContext, Хотя кое-что из того, что я прочитал, имеет смысл, у меня все еще нет полного понимания различий, и это заставляет меня задуматься о моей текущей реализации. Должен ли я использовать DbContext, ObjectContext или оба? Считается ли использование одного из них анти-паттерном?

3 ответа

Решение

DbContext это просто обертка вокруг ObjectContext,

DbContext это просто набор API, которые проще в использовании, чем API, предоставляемые ObjectContext,

В любом случае, здесь вы найдете очень простой шаблон Visual Studio, который использует шаблон репозитория и Entity Framework.

Мы можем привести DBContext к типу ObjectContext.

public class MyContext: DbContext
{
    public DbSet<Blog> Blogs { get; set; }
   //other dbsets, ctor etc.

    public ObjectContext ObjectContext()
    {
        return (this as IObjectContextAdapter).ObjectContext;
    }
}

От ObjectContext VS DBContext.

Dbcontext может быть определен как облегченная версия ObjectContext или мы можем сказать, что Dbcontext является оберткой ObjectContext и предоставляет только общие функции, которые действительно необходимы в программировании. Мы также можем получить ссылку на ObjectContext от DbContext, чтобы использовать те функции, которые поддерживаются только в ObjectContext.

Следующий код может помочь получить объект ObjectContext из существующего объекта DbContext.

public class EntityDBContext: DbContext, IObjectContextAdapter
{
   ObjectContext IObjectContextAdapter.ObjectContext
   {
        get
        {
              var objectContext = (this as IObjectContextAdapter)
              if(objectContext != null)
                return (this as IObjectContextAdapter).ObjectContext;
              else
                return null;
        }
   }
}

Наконец, DbContext не является заменой ObjectContext, но это простая альтернатива, основанная на ObjectContext.

Другие вопросы по тегам