"ObjectContext" против "DbContext" в Entity Framework
Я использую класс DbContext
в коде, который я создаю, который основан на шаблонах общих хранилищ и единиц измерения. (Я следую руководству здесь.) Во время работы над этим проектом я столкнулся с классом ObjectContext
.
Я прочитал довольно много сообщений, в которых обсуждаются ObjectContext
и DbContext
. Хотя некоторые из того, что я прочитал, имеют смысл, я до сих пор не имею полного понимания различий, и это оставляет мне интерес к моей текущей реализации. Должен ли я использовать DbContext
, ObjectContext
или оба? Использует ли один из них теперь рассмотренный анти-шаблон?
Ответы
Ответ 1
DbContext
- это просто обертка вокруг ObjectContext
.
DbContext
- это всего лишь набор API-интерфейсов, которые проще в использовании, чем API, выставленные ObjectContext
.
В любом случае здесь вы найдете очень простой шаблон Visual Studio, который использует шаблон хранилища и инфраструктуру Entity Framework.
Ответ 2
Мы можем использовать DBContext для ввода ObjectContext
public class MyContext: DbContext
{
public DbSet<Blog> Blogs { get; set; }
//other dbsets, ctor etc.
public ObjectContext ObjectContext()
{
return (this as IObjectContextAdapter).ObjectContext;
}
}
Ответ 3
От 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.