Entity Framework - где мой контекст объекта?

Хорошо, мне явно не хватает чего-то очень простого. Я очень новичок в Entity Framework.

Я хочу вызвать хранимые процедуры, не импортируя их, поэтому планировал использовать ExecuteStoreQuery(). Согласно документации, ExecuteStoreQuery является методом ObjectContext. Но я не знаю, где взять объект ObjectContext.

Я создал свои полномочия с использованием Database First. До сих пор я получал доступ к своим объектам примерно так:

var db = new MyEntities();

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

Но я не могу назвать db.ExecuteStoreQuery, потому что db не является ObjectContext.

Я googled, как получить ObjectContext от сущности. Я нахожу ответы, но все они отмечены предостережениями, говоря, что это обходной путь, и только использовать его, если у вас нет другого выбора. Итак, каков ПРАВЫЙ путь?

Все примеры, которые я нашел для использования ExecuteStoreQuery, предполагают, что у вас уже есть ObjectContext. Не очень полезно.

Я нашел один веб-сайт, в котором указано, что ObjectContext автоматически генерируется Entity Framework. Если это случай, то где это?

Мне явно не хватает чего-то очень простого здесь. Это не может быть так сложно.

Ответы

Ответ 1

Чтобы перейти в ObjectContext вашего DbContext, вам нужно будет сделать следующее:

var objectContext = ((IObjectContextAdapter)myDbContextObject).ObjectContext;

Ответ 2

ObjectContext был заменен на DbContext в Entity Framework 4.1. Фактически DbContext - это адаптер (обертка) поверх ObjectContext. Если вам нужно получить ObjectContext, вы можете указать свой экземпляр DbContext на IObjectContextAdapter (он будет реализован явно) и будет завершен экземпляр ObjectContext:

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

Кстати. Я думаю, вы ищете метод db.Database.SqlQuery.

Ответ 3

В вашем случае MyEntities является вашим ObjectContext.

Технически это автоматически сгенерированный класс EntityFramework, который наследуется от класса ObjectContext.