2012-02-07 4 views
13

Я использую класс DbContext в коде, который я создаю, на основе шаблонов общих хранилищ и единиц измерения. (Я следую инструкциям here.) Во время работы над этим проектом я столкнулся с классом ObjectContext.«ObjectContext» vs «DbContext» в Entity Framework

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

+1

Возможный дубликат [Является ли DbContext таким же, как DataContext?] (Http://stackoverflow.com/questions/3471455/is-dbcontext-the-same-as-datacontext) – bytebender

+0

Это не декоратор, его композитный паттерн –

ответ

19

DbContext - это всего лишь обертка вокруг ObjectContext.

DbContext - это всего лишь набор API-интерфейсов, которые проще в использовании, чем API, выставленные с помощью ObjectContext.

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

+1

проверьте это [статья] (http://www.c-sharpcorner.com/UploadFile/ff2f08/objectcontext-vs-dbcontext/) для получения большего количества – stom

-1

Мы можем бросить DbContext ввести ObjectContext

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

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

От 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.

+0

, который выдает StackOwerflowException. См. Https://msdn.microsoft.com/library/ms182153.aspx –