13

我首先遵循數據庫方法;我在SQL Server 2008數據庫中創建了表,然後使用ADO.NET實體數據模型將這些表映射到實體框架類。但是,當我打開designer.cs文件,我發現在類定義下面的代碼自動創建:爲什麼實體框架在使用ADO.NET實體數據模型映射數據庫表時,自動使用ObjectContext而不是DbContext

public partial class PortalEntities : ObjectContext 

所以我就以下三個問題是讓我困惑:

  1. 爲什麼我的PortalEntities類是從ObjectContext派生而不是DbContext,因爲我期待?

  2. ObjectContext & DbContext之間的主要區別,或者他們主要是相同的,並且提供相同的功能

  3. 當我嘗試寫類似下面的代碼的東西:

    Student student = db.Students.Find(id); 
    

我發現我不能使用.Find()方法,因爲我以前使用DbContext來做,所以這是否意味着ObjectContext & DbContext有不同的方法,我可以使用?

BR

回答

24

DbContext是簡化了我們大多數做的事情的接口ObjectContext周圍的包裝。

如果你有一個DbContext你仍然可以訪問ObjectContext((IObjectContextAdapter)dbContext).ObjectContext;

如果您想先使用數據庫時使用的DbContext代替ObjectContext,您可以切換的二手生成代碼的模板。您可以通過右鍵單擊EDMX並選擇「添加代碼生成項目」來完成此操作。然後您可以選擇DbContext模板。

Here is an example整個過程。

+0

感謝您的回覆;但是我會從我的數據庫apprach中首先使用DbContext而不是ObjectContext中獲益嗎? –

+4

DbContext具有簡化的界面。它會更容易使用,並且如果有必要,你總是可以將它轉換爲ObjectContext。此外,DbContext更容易模擬單元測試的目的。 –

+0

清楚的解釋!謝謝 – GibboK

0

由於VS2012的默認代碼生成從ObjectContext更改爲DbContext

相關問題