0

我是实体框架的新手。

我尝试编写以下方法,但出现编译时错误。

 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


        }

'System.Data.Objects.ObjectQuery.ObjectQuery(string, System.Data.Objects.ObjectContext)' 的最佳重载方法匹配有一些无效参数

4

2 回答 2

2

Your AWEntities context object is not recongnized as an ObjectContext. Please check the type of your object. Take a look at definition of ObjectContext and ObjectQuery's constructor

于 2013-01-27T01:10:58.367 回答
1

这是 Entity Framework 比较令人困惑的地方之一。您必须意识到 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 世界更为实用。

于 2013-02-02T14:48:38.330 回答