我是实体框架的新手。
我尝试编写以下方法,但是我得到编译时错误。
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;有一些无效的论点
答案 0 :(得分:2)
您的AWEntities context
对象无法识别为ObjectContext
。请检查对象的类型。看一下ObjectContext和ObjectQuery'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世界更实用。