17

好的,我显然错过了一些非常基本的东西。我对实体框架很陌生。

我想调用存储过程而不导入它们,所以我打算使用 ExecuteStoreQuery()。根据文档,ExecuteStoreQuery 是 ObjectContext 的一种方法。但是,我不知道从哪里获得我的 ObjectContext。

我使用 Database First 生成了我的实体。到目前为止,我一直在访问我的实体,如下所示:

var db = new MyEntities();

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

但我不能调用 db.ExecuteStoreQuery,因为 db 不是 ObjectContext。

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

我发现的所有使用 ExecuteStoreQuery 的示例都假定您已经拥有 ObjectContext。不是很有帮助。

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

我显然在这里遗漏了一些非常简单的东西。这不可能那么难。

4

3 回答 3

36

要获得 DbContext 的 ObjectContext,您需要做的就是以下几点:

var objectContext = ((IObjectContextAdapter)myDbContextObject).ObjectContext;
于 2013-01-09T19:49:39.170 回答
13

ObjectContextDbContext在 Entity Framework 4.1 中被替换为。实际上DbContext是一个适配器(包装器)ObjectContext。如果您需要获取ObjectContext,可以将您的DbContext实例转换为IObjectContextAdapter接口(它是显式实现的)并且包装的ObjectContext实例将可用:

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

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

于 2013-01-09T20:00:16.370 回答
1

在您的情况下,MyEntities 是您的 ObjectContext。

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

于 2013-01-09T19:46:08.687 回答