【问题标题】:Entity Framework : ExecuteStoreQuery not found in ObjectContext实体框架:在 ObjectContext 中找不到 ExecuteStoreQuery
【发布时间】:2015-11-10 23:03:32
【问题描述】:

我正在使用带有 Framework 4.0 的 Visual Studio 2010 Express,如果我是正确的,它带有 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 中找不到任何有关缺失方法的信息。 这是否意味着 Visual Studio 2010 Express 不包含 Entity Framework 4 ?因为标准版可以,而快递版使用旧版本会很奇怪。

当然,我可以使用经典的 DataReader,但 ExecuteStoreQuery 要好得多。

有什么想法吗?

编辑:我将查询更改为真实查询以解释为什么 ExecuteStoreQuery 有时对于复杂查询更容易(至少对于 LINQ To Entities 的初学者而言)

【问题讨论】:

  • 我知道在 Linq2SQL 中称为ExecuteQuery。你确定你的名字是正确的?
  • ExecuteStoreQuery 在我的实体框架项目中可用。我刚刚检查过了。但我从未使用过它。我使用 linq 进行所有查询。

标签: c# .net


【解决方案1】:

我遇到了同样的问题,ExecuteStoreQuery 不存在。我发现我的项目默认使用 .NET Framework 3.5,而使用 .NET Framework 4 时出现ExecuteStoreQuery em>。

【讨论】:

    【解决方案2】:

    为什么不改用LINQ to Entities

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

    【讨论】:

    • 我将原始查询编辑为真实查询。它足够复杂,足以证明使用 ExecuteStoreQuery 的合理性。即使我可以在 LINQ to Entities 中做到这一点,我只是想知道为什么我的 ObjectContext 上不存在 ExecuteStoreQuery
    • 好的,但我仍然会使用 LINQ to Entities 并编写我自己的自定义 LINQ 扩展方法。
    • 我最终使用了 LINQ to Entities,比编写应该已经存在的扩展方法更好。由于我必须快点进行开发,所以我将此问题标记为已回答,即使它并不是我所期望的。
    【解决方案3】:

    我在将旧项目升级到 VS2013/MVC4/EF6.1 时遇到了这个问题

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

    我最初也采用了这种 hacky 方法:

    我将 edmx 属性中的 Code Generation Strategy 更改为 Legacy ObjectContext 并删除了 T4 模板文件。

    这按我的预期生成了模型代码,但由于 EF6 中的命名空间更改,它无法编译。 所以我进入了生成的代码文件,并用System.Data.Entity.Core.X替换了每个没有被解析的System.Data.X实例。

    当然,这是不可取的,但会让您的遗留项目按您期望的方式编译和工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 1970-01-01
      相关资源
      最近更新 更多