Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Entity Framework - Where is my Object Context?

Ok, I'm obviously missing something very basic. I'm very new to Entity Framework.

I want to call stored procedures without importing them, so I was planning on using ExecuteStoreQuery(). According to the documentation, ExecuteStoreQuery is a method of ObjectContext. But, I have no idea where to get my ObjectContext.

I generated my entites using Database First. So far, I have been accessing my entities something like this:

var db = new MyEntities();

PRODUCT p = db.PRODUCTS.First(a => a.PRODUCTSKEY == thekey);

But I can't call db.ExecuteStoreQuery, becase db isn't an ObjectContext.

I've googled how to get ObjectContext from an entity. I find some answers, but they're all flagged with cautions, saying that it's a workaround, and only to use it if you have no other option. Ok, so what is the RIGHT way?

All examples that I've found for using ExecuteStoreQuery assume that you already have your ObjectContext. Not very helpful.

I found one website that stated that the ObjectContext is "automatically generated" by Entity Framework. If that's the case, then where is it?

I'm obviously missing something very simple here. This can't be that difficult.

like image 941
JoeMjr2 Avatar asked Jan 09 '13 19:01

JoeMjr2


People also ask

What is object context in Entity Framework?

The ObjectContext class is the primary class for interacting with data as objects that are instances of entity types that are defined in a conceptual model. An instance of the ObjectContext class encapsulates the following: A connection to the database, in the form of an EntityConnection object.

What is DbContext and DbSet in Entity Framework?

DbContext generally represents a database connection and a set of tables. DbSet is used to represent a table. Your code sample doesn't fit the expected pattern.

Which interface you have to implement to get the reference of ObjectContext from DbContext?

If you need to get ObjectContext you can cast your DbContext instance to IObjectContextAdapter interface (it is implemented explicitly) and wrapped ObjectContext instance will be available: ObjectContext context = ((IObjectContextAdapter)db).

What is DbContext in MVC?

A DbContext instance represents a combination of the Unit Of Work and Repository patterns such that it can be used to query from a database and group together changes that will then be written back to the store as a unit. DbContext is conceptually similar to ObjectContext.


2 Answers

To get to the ObjectContext of your DbContext, all you'd need to do is the following:

var objectContext = ((IObjectContextAdapter)myDbContextObject).ObjectContext;
like image 91
Corey Adler Avatar answered Oct 13 '22 18:10

Corey Adler


ObjectContext was replaced by DbContext in Entity Framework 4.1. Actually DbContext is an adapter (wrapper) over ObjectContext. If you need to get ObjectContext you can cast your DbContext instance to IObjectContextAdapter interface (it is implemented explicitly) and wrapped ObjectContext instance will be available:

ObjectContext context = ((IObjectContextAdapter)db).ObjectContext;

BTW I think you are looking for db.Database.SqlQuery method.

like image 40
Sergey Berezovskiy Avatar answered Oct 13 '22 17:10

Sergey Berezovskiy