2012-02-07 69 views
13

我在基於通用存儲庫和工作單元設計模式創建的代碼中使用DbContext類。 (我遵循指導here。)在這個項目上工作時,我遇到了ObjectContext類。實體框架中的'ObjectContext'vs'DbContext'

我讀過不少帖子,討論ObjectContextDbContext。雖然我讀過的一些內容是有道理的,但我仍然沒有完全理解這些差異,這讓我想知道我目前的實現。我應該使用DbContextObjectContext還是兩者兼而有之?正在使用其中之一,現在被認爲是反模式?

+1

的可能重複的[是的DbContext相同的DataContext?](http://stackoverflow.com/questions/3471455/is-dbcontext-the-same-as-datacontext) – bytebender 2012-06-14 00:19:27

+0

這不是一個裝飾其一個複合模式 – 2012-12-02 17:41:17

回答

19

DbContext只是一個圍繞ObjectContext的包裝。

DbContext只是一組比較容易使用的API,比ObjectContext公開的API更易於使用。

無論如何,here你會發現一個非常簡單的使用存儲庫模式和實體框架的Visual Studio模板。

+1

檢查此[文章](http://www.c-sharpcorner.com/UploadFile/ff2f08/objectcontext-vs-dbcontext/)更多 – stom 2015-10-16 15:44:15

-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的一個包裝,只有公開編程中真正需要的常用功能。 我們還可以從DbContext獲得對ObjectContext的引用,以使用僅在ObjectContext中受支持的那些功能。

以下代碼可能有助於從現有DbContext對象獲取ObjectContext對象。

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 – 2017-09-20 08:41:09