Entity framework 实体框架-我的对象上下文在哪里?

Entity framework 实体框架-我的对象上下文在哪里?,entity-framework,objectcontext,Entity Framework,Objectcontext,好吧,我显然遗漏了一些非常基本的东西。我对实体框架非常陌生 我想在不导入存储过程的情况下调用它们,所以我计划使用ExecuteStoreQuery()。根据文档,ExecuteStoreQuery是ObjectContext的一种方法。但是,我不知道从哪里获取ObjectContext 我首先使用数据库生成我的实体。到目前为止,我一直在访问我的实体,如下所示: var db = new MyEntities(); PRODUCT p = db.PRODUCTS.First(a => a.

好吧,我显然遗漏了一些非常基本的东西。我对实体框架非常陌生

我想在不导入存储过程的情况下调用它们,所以我计划使用ExecuteStoreQuery()。根据文档,ExecuteStoreQuery是ObjectContext的一种方法。但是,我不知道从哪里获取ObjectContext

我首先使用数据库生成我的实体。到目前为止,我一直在访问我的实体,如下所示:

var db = new MyEntities();

PRODUCT p = db.PRODUCTS.First(a => a.PRODUCTSKEY == thekey);
但我不能调用db.ExecuteStoreQuery,因为db不是ObjectContext

我用谷歌搜索了如何从实体中获取ObjectContext。我找到了一些答案,但它们都标有警告,说这是一个解决办法,只有在你没有其他选择时才使用它。好的,那么正确的方法是什么

我找到的所有使用ExecuteStoreQuery的示例都假设您已经有了ObjectContext。不是很有帮助

我发现一个网站声明ObjectContext是由实体框架“自动生成”的。如果是这样,那它在哪里


我显然遗漏了一些非常简单的东西。这不会那么困难。

在您的例子中,MyEntities是您的ObjectContext


从技术上讲,它是从ObjectContext类继承的EntityFramework自动生成的类。

要获得DbContext的ObjectContext,您只需执行以下操作:

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

在实体框架4.1中,
ObjectContext
DbContext
替换。实际上,
DbContext
ObjectContext
上的适配器(包装器)。如果需要获取
ObjectContext
,则可以将
DbContext
实例强制转换为
IObjectContextAdapter
接口(它是显式实现的),并且包装的
ObjectContext
实例将可用:

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

顺便说一句,我认为您正在寻找方法。

?@jrummell No.db是一个DbContext实例,它没有这样的方法:好的,如果我尝试:MyEntities.ExecuteStoreQuery(MyQuery),编译器说MyEntities“不包含“ExecuteStoreQuery”的定义”。其他人是正确的,取决于您使用的EF版本,对于EF4和更早版本,您应该能够遵循以下步骤:实际上,更换发生在EF 4.1中,首先引入代码,请参见以下链接: