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.