当你想在你的代码中找到一个错误时,这很难;当你认为你的代码是不会有错误时,这就更难了。

C 35;-实体框架:在objectcontext中找不到executestrequery

admin 74℃
我将Visual Studio 2010 Express与Framework 4.0一起使用,如果我是正确的,它将与Entity Framework 4一起使用。

我的objectcontext定义为:

public partial class CreaturesEntities : global::System.Data.Objects.ObjectContext

我试图使用ExecuteStoreQuery:

using System.Data.Objects;
using System.Data.Entity;
[...]
context = new CreaturesEntities();
string query = "select type, min(value) value from saving_throw where ";
string conditions = "(classe_id=" + classe_id + " and level=" + level1 + ")";
if (classe.subclass1_id != null)
    conditions += " or (classe_id=" + classe.subclass1_id + " and level=" + level1 + ")";
if (classe.subclass2_id != null)
    conditions += " or (classe_id=" + classe.subclass2_id + " and level=" + level2 + ")";
if (classe.subclass3_id != null)
    conditions += " or (classe_id=" + classe.subclass3_id + " and level=" + level3 + ")";
query = query + conditions + " group by type";
var q = context.ExecuteStoreQuery<SimpleNumber>(query);
// SimpleNumber is a class with an int property, I suppose ExecuteStoreQuery<Integer> wouldn't work?

当我键入'context.'时,在上下文菜单中找不到ExecuteStoreQuery,这意味着无论出于什么原因,它都不可用。 我在objectcontext中找不到缺少方法的任何内容。 这是否意味着visualstudio2010express不包含实体框架4?因为标准版是这样的,而且如果速成版使用的是旧版本就很奇怪了。

当然,我可以使用经典的数据读取器,但executestreequery要好得多。

知道吗?

编辑:我将查询改为实际查询,以解释为什么executestreequery有时更容易用于复杂查询(至少对于linq to entities中的初学者而言)

为什么不改用LINQ to Entities?

context.Spells.Where(s => s.ID.Equals(1));

我也有同样的问题 ExecuteStoreQuery 不存在。我发现我的项目默认使用.NETFramework3.5,并且 ExecuteStoreQuery 使用.NET Framework 4时出现。

我在将旧项目升级到vs2013/mvc4/ef6.1时遇到了这个问题

我找到的最佳解决方案是this EF 6.x EntityObject Generator

我最初也采用了这种老套的方法:

我将edmx属性中的代码生成策略更改为 Legacy ObjectContext 并删除了t4模板文件。

这生成了我所期望的模型代码,但由于ef6中的命名空间更改,它无法编译。 所以我进入生成的代码文件,替换了 System.Data.X 那不是因为 System.Data.Entity.Core.X .

当然,这是不可取的,但会让您的遗留项目按照您的预期进行编译和工作。

转载请注明:我的代码 » C 35;-实体框架:在objectcontext中找不到executestrequery