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

时间:2013-01-09 19:43:12

标签: entity-framework objectcontext

好的,我显然遗漏了一些非常基本的东西。我是Entity Framework的新手。

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

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

var db = new MyEntities();

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

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

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

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

我发现一个网站声明ObjectContext是由Entity Framework“自动生成的”。如果是这样,那么它在哪里?

我显然在这里遗漏了一些非常简单的事情。这不是那么困难。

3 个答案:

答案 0 :(得分:35)

要获取DbContext的ObjectContext,您需要做的就是:

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

答案 1 :(得分:12)

实体框架4.1中的ObjectContext替换了

DbContext。实际上DbContextObjectContext上的适配器(包装器)。如果您需要获取ObjectContext,可以将DbContext实例转换为IObjectContextAdapter接口(显式实现),并且可以使用包裹的ObjectContext实例:

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

BTW我认为您正在寻找db.Database.SqlQuery方法。

答案 2 :(得分:1)

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

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