Ответ 1
Чтобы перейти в ObjectContext вашего DbContext, вам нужно будет сделать следующее:
var objectContext = ((IObjectContextAdapter)myDbContextObject).ObjectContext;
Хорошо, мне явно не хватает чего-то очень простого. Я очень новичок в 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. Если это случай, то где это?
Мне явно не хватает чего-то очень простого здесь. Это не может быть так сложно.
Чтобы перейти в ObjectContext вашего DbContext, вам нужно будет сделать следующее:
var objectContext = ((IObjectContextAdapter)myDbContextObject).ObjectContext;
ObjectContext
был заменен на DbContext
в Entity Framework 4.1. Фактически DbContext
- это адаптер (обертка) поверх ObjectContext
. Если вам нужно получить ObjectContext
, вы можете указать свой экземпляр DbContext
на IObjectContextAdapter
(он будет реализован явно) и будет завершен экземпляр ObjectContext
:
ObjectContext context = ((IObjectContextAdapter)db).ObjectContext;
Кстати. Я думаю, вы ищете метод db.Database.SqlQuery
.
В вашем случае MyEntities является вашим ObjectContext.
Технически это автоматически сгенерированный класс EntityFramework, который наследуется от класса ObjectContext.