2012-02-07 13 views
13

Estoy usando la clase DbContext dentro del código que estoy creando y que está basada en los patrones de diseño de Repositorios genéricos y Unidad de trabajo. (Estoy siguiendo la guía here.) Mientras trabajaba en este proyecto, me encontré con la clase ObjectContext.'ObjectContext' vs 'DbContext' en Entity Framework

He leído un buen número de mensajes que hablan de ObjectContext contra DbContext. Si bien algo de lo que he leído tiene sentido, todavía no entiendo completamente las diferencias y esto me deja preguntándome sobre mi implementación actual. ¿Debo usar DbContext, ObjectContext o ambos? ¿El uso de uno de estos ahora se considera un antipatrón?

+1

posible duplicado de [¿Es DbContext igual que DataContext?] (Http://stackoverflow.com/questions/3471455/is-dbcontext-the-same-as-datacontext) – bytebender

+0

Esto no es un Decorador es un patrón compuesto –

Respuesta

19

DbContext es solo un contenedor alrededor de ObjectContext.

DbContext es solo un conjunto de API que son más fáciles de usar que las API expuestas por ObjectContext.

De todos modos, here encontrará una plantilla de Visual Studio muy simple que usa el Patrón de repositorio y el Entity Framework.

+1

revise este [artículo] (http://www.c-sharpcorner.com/UploadFile/ff2f08/objectcontext-vs-dbcontext/) para obtener más – stom

-1

Podemos echar una DBContext para escribir ObjectContext

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

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

De ObjectContext VS DBContext.

Dbcontext puede definirse como una versión ligera de la ObjectContext o podemos decir Dbcontext es un envoltorio de ObjectContext y sólo los expone características comunes que realmente se requieren en la programación. También podemos obtener una referencia al ObjectContext desde entonces DbContext para usar esas características que solo son compatibles con ObjectContext.

El siguiente código podría ayudar a obtener un objeto ObjectContext de un objeto DbContext existente.

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; 
     } 
    } 
} 

Por último, DbContext no es un sustituto de ObjectContext, pero es una alternativa simple que se basa en ObjectContext.

+0

este arroja StackOwerflowException. Consulte https://msdn.microsoft.com/library/ms182153.aspx –

Cuestiones relacionadas