2012-02-07 16 views
13

Używam klasy DbContext w kodzie, który tworzę, który jest oparty na wzorach projektu Generic Repositories i Unit of Work. (Postępuję zgodnie z wytycznymi here.) Podczas pracy nad tym projektem natknąłem się na klasę ObjectContext.'ObjectContext' kontra 'DbContext' w Entity Framework

Znam wiele postów, które omawiają: ObjectContext vs. DbContext. Podczas gdy niektóre z tego, co przeczytałem, mają sens, nadal nie mam pełnego zrozumienia różnic i to sprawia, że ​​zastanawiam się nad moją obecną implementacją. Czy powinienem używać DbContext, ObjectContext lub obu? Czy użycie jednego z nich jest obecnie uważane za anty-wzór?

+1

możliwy duplikat [Czy DbContext jest taki sam jak DataContext?] (Http://stackoverflow.com/questions/3471455/is-dbcontext-tame-asame-as-datacontext) – bytebender

+0

To nie jest dekorator, jego wzór złożony –

Odpowiedz

19

DbContext to tylko opakowanie o numerze ObjectContext.

DbContext to tylko zestaw interfejsów API, które są łatwiejsze w użyciu niż interfejsy API wyeksponowane przez ObjectContext.

W każdym razie, here znajdziesz bardzo prosty szablon Visual Studio, który używa wzorca repozytorium i struktury encji.

+1

Sprawdź ten artykuł (http://www.c-sharpcorner.com/UploadFile/ff2f08/objectcontext-vs-dbcontext/), aby uzyskać więcej informacji: – stom

-1

Możemy rzucić DBContext wpisać ObjectContext

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

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

Od ObjectContext VS DBContext.

Dbcontext można zdefiniować jako lekkiej wersji ObjectContext lub możemy powiedzieć Dbcontext jest owinięcie z ObjectContext i naraża tylko wspólne funkcje, które są naprawdę wymagane w programowaniu. Możemy również uzyskać odwołanie do ObjectContext z DbContext, aby użyć tych funkcji, które są obsługiwane tylko w ObjectContext.

Poniższy kod może pomóc w uzyskaniu obiektu ObjectContext z istniejącego obiektu 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; 
     } 
    } 
} 

Wreszcie, DbContext nie zastępuje ObjectContext, ale jest to prosta alternatywa, która opiera się na ObjectContext.

+0

ten jeden zgłasza wyjątek StackOwerflowException. Zobacz https://msdn.microsoft.com/library/ms182153.aspx –

Powiązane problemy