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

Joe*_*jr2 16 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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

我显然在这里遗漏了一些非常简单的东西.这不是那么困难.

Iro*_*n84 35

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

var objectContext = ((IObjectContextAdapter)myDbContextObject).ObjectContext;
Run Code Online (Sandbox Code Playgroud)


Ser*_*kiy 12

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

ObjectContext context = ((IObjectContextAdapter)db).ObjectContext;
Run Code Online (Sandbox Code Playgroud)

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

  • 实际上,更换发生在EF 4.1中,随着Code-First的引入,请参阅此链接:http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-特征CTP5部分-1-引入和 - model.aspx (3认同)