Why does Entity Framework automatically use the ObjectContext instead of the DbContext when mapping database tables using ADO.NET Entity datamodel
Asked Answered
R

2

12

I am following the database approach first; I have created the tables in my SQL Server 2008 database, then I map those tables to Entity Framework classes using an ADO.NET Entity Data Model. But when I opened the designer.cs file I found the following code in the class definition which was created automatically:

public partial class PortalEntities : ObjectContext

so I have the following three question that get my confused:

  1. Why does my PortalEntities class derive from ObjectContext and not DbContext as I was expecting?

  2. Is there a major difference between ObjectContext & DbContext, or they are mainly the same and offer that same capabilities

  3. When I try to write the something similar to the following code:

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

I found that I cannot use .Find() method as I used to do using DbContext, so does this mean that ObjectContext & DbContext have different methods that I can use?

BR

Riven answered 26/1, 2012 at 15:47 Comment(0)
P
23

The DbContext is a wrapper around the ObjectContext which simplifies the interface for the things we do most.

If you have an DbContext you can still access the ObjectContexttrough ((IObjectContextAdapter)dbContext).ObjectContext;

If you want to use the DbContext instead of the ObjectContext when using database first, you can switch the template that's used for generating your code. You can do this by right-clicking in your EDMX and selecting 'Add Code Generation Item'. You can then select the DbContext template.

Here is an example of the whole process.

Pliske answered 26/1, 2012 at 15:54 Comment(2)
thanks for your reply; but will i benefit from using DbContext instead of ObjectContext in my database apprach first ?.Riven
The DbContext has a simplified interface. It will be easier to use and if necessary you can always cast it to an ObjectContext. Also the DbContext is easier to mock for unit testing purposes.Pliske
W
0

Since VS2012 the default code generation changed from ObjectContext to DbContext.

Wanwand answered 21/4, 2015 at 18:26 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.