EF5 ObjectResult到ObjectQuery是null?

时间:2013-02-06 13:53:56

标签: c# .net entity-framework entity-framework-5

我正在尝试从实体框架获取带有参数的查询字符串以进行调试。不,我不会使用EFProfiler,因为查询字符串需要在页面上作为输出可见。大多数查询是使用ExecuteStoredQuery()手动编写的。但是,将它们转换为ObjectQuery会产生null。

示例:

ObjectResult<Parent> model = _context.ObjectContext().ExecuteStoreQuery<Parent>("SELECT * FROM Parents");
var objectQuery = model.AsQueryable() as ObjectQuery<Parent>;

objectQuery为null。 ObjectContext()是datacontext中的一个简单方法,如下所示:

return (this as IObjectContextAdapter).ObjectContext;

我已经用尽了自己的想法,而且从搜索中得到的任何东西都是......好吧,没用,因为似乎没有人能解决这个问题。请注意,结果会从查询中正确返回。

编辑:是的,我也应该提到这一点。

这样做:

var oq = m as ObjectQuery<Parent>;

让我这样:

无法通过引用转换,装箱转换,取消装箱转换,换行转换或空类型转换将类型'System.Data.Objects.ObjectResult'转换为'System.Data.Objects.ObjectQuery'

从那时起,我认为它需要被强制转换为AsQueryable(),因为显而易见的原因,它是... null。忘了添加这个小细节是我累了头。

3 个答案:

答案 0 :(得分:1)

我认为其他通道明确表示您无法将ObjectResult<T>投射到ObjectQuery<T>。但我对你的评论很感兴趣

  

我尝试过CreateQuery,但我遇到了问题。首先,它不喜欢当用户尝试SELECT *时,你似乎必须指定你需要获得的所有字段。

您可以使用ObjectQuery进行“*”搜索:

ObjectContext().ObjectQuery<Parent>("SELECT VALUE par FROM Parents AS par")

如您所见,查询字符串中没有实际的*,跟踪字符串没有*但显示所有字段。但是您不必指定所有字段来构建查询字符串。我希望这可以帮助您更好地利用ObjectQuery

答案 1 :(得分:0)

您的演员as ObjectQuery<Parent>不正确,因为ObjectResult<Parent>.AsQueryable()将返回IQueryable<Parent>类型ObjectQuery<Parent>

AsQueryable是类Queryable的扩展方法,它将IEnumerable转换为IQueryable。

结果是你的变量objectQuery为空。

答案 2 :(得分:0)

当然你实际上想要使用CreateQuery(sql)而不是ExecuteStoreQuery(sql)。

鉴于名称,ExecuteStoreQuery实际上运行SQL,而CreateQuery返回一个准备好发送到数据库的ObjectQuery。

显然,您可以在ObjectQuery上调用Execute来返回ObjectResult