0

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

例子:

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

对象查询为空。ObjectContext() 是 datacontext 中的一个简单方法,如下所示:

return (this as IObjectContextAdapter).ObjectContext;

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

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

这样做:

var oq = m as ObjectQuery<Parent>;

给我这个:

无法通过引用转换、装箱转换、拆箱转换、包装转换或空类型转换将类型“System.Data.Objects.ObjectResult”转换为“System.Data.Objects.ObjectQuery”

当我认为它需要被转换为 AsQueryable() 的时候,它,嗯……是空的,原因很明显。是我疲倦的脑袋忘记添加这个小细节了。

4

3 回答 3

1

我认为其他答案清楚地表明您不能将 anObjectResult<T>转换为ObjectQuery<T>. 但我对你的评论很感兴趣

我尝试了 CreateQuery,但遇到了问题。一方面,它不喜欢当用户尝试 SELECT * 时,您似乎必须指定您需要获取的所有字段。

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

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

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

于 2013-02-06T21:21:17.973 回答
0

Surely you ACTUALLY want to use CreateQuery(sql) rather than ExecuteStoreQuery(sql).

Given the name, ExecuteStoreQuery actually runs the SQL, whilst CreateQuery returns an ObjectQuery ready to be sent to the database.

Obviously you can then call Execute on ObjectQuery to return the ObjectResult

于 2013-02-06T18:32:55.790 回答
0

您的演员表as ObjectQuery<Parent>不正确,原因ObjectResult<Parent>.AsQueryable()将返回一个IQueryable<Parent>不是 type 的ObjectQuery<Parent>

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

结果是您的变量 objectQuery 为空。

于 2013-02-06T14:07:19.743 回答