XXX的最佳重载方法匹配有一些无效的参数

时间:2013-01-27 00:56:43

标签: c# asp.net entity-framework visual-studio-2012 entity-framework-5

我是实体框架的新手。

我尝试编写以下方法,但是我得到编译时错误。

 protected static void EntitySQLQuery(AWEntities context)
        {
            string cmd = @"SELECT VALUE c FROM AWEntities.Person AS c WHERE c.FirstName = @FirstName";

            ObjectQuery<Person> persons = new ObjectQuery<Person>(cmd, context);//Error


        }

  

最佳重载方法匹配   &#39; System.Data.Objects.ObjectQuery.ObjectQuery(字符串,   System.Data.Objects.ObjectContext)&#39;有一些无效的论点

2 个答案:

答案 0 :(得分:2)

您的AWEntities context对象无法识别为ObjectContext。请检查对象的类型。看一下ObjectContextObjectQuery's constructor

的定义

答案 1 :(得分:1)

这是实体框架中更令人困惑的一点。您必须意识到的是,ObjectContext是执行EntityFramework的旧方法,大约在2010年。这是在DbContext(和代码优先)之前。您仍然可以通过将DbContext转换为IOjbectContextAdapter来获取ObjectContext,如下所示:

((IObjectContextAdapter)context).ObjectContext;

这将使您的查询看起来像这样:

ObjectQuery<Person> persons = new ObjectQuery<Person>(cmd, ((IObjectContextAdapter)context).ObjectContext);

我不知道实体结构化查询是否再次被提升。我会考虑在可能的情况下使用LInQ。

var firstname = "Fred";
return from person in AWEntities.Person
       where person.FirstName = firstname
       select person;

如果您正在阅读Julie Lerman的书籍,我强烈建议您选择这三本书。第一个是一个巨大的坟墓,解释了所有的基础知识(并围绕ObjectContext的方式编写),后两个对今天的代码优先/ dbcontext世界更实用。

相关问题