【问题标题】:EF5 ObjectResult to ObjectQuery is null?EF5 ObjectResult 到 ObjectQuery 是否为空?
【发布时间】:2013-02-06 13:53:55
【问题描述】:

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

例子:

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

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

return (this as IObjectContextAdapter).ObjectContext;

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

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

这样做:

var oq = m as ObjectQuery<Parent>;

给我这个:

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

当我认为它需要被转换为 AsQueryable() 时,由于显而易见的原因,它是 null。是我累了,忘了添加这个小细节。

【问题讨论】:

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


    【解决方案1】:

    我认为其他答案明确表示您不能将ObjectResult&lt;T&gt; 转换为ObjectQuery&lt;T&gt;。但我对你的评论很感兴趣

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

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

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

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

    【讨论】:

    • 我认为您的意思是 can´t cast 而不是 can cast
    【解决方案2】:

    您的演员as ObjectQuery&lt;Parent&gt; 不正确,因为ObjectResult&lt;Parent&gt;.AsQueryable() 将返回一个不属于ObjectQuery&lt;Parent&gt; 类型的IQueryable&lt;Parent&gt;

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

    结果是你的变量 objectQuery 为空。

    【讨论】:

    • 我已经用这个被遗忘的细节更新了原始问题,它不允许我将原始 m 转换为 objectquery。
    【解决方案3】:

    您肯定想使用 CreateQuery(sql) 而不是 ExecuteStoreQuery(sql)。

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

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

    【讨论】:

    • 我尝试了 CreateQuery,但遇到了问题。一方面,它不喜欢当用户尝试 SELECT * 时,您似乎 必须 指定您需要获取的所有字段(从应用程序的角度来看这是不可接受的)。此外,我看到的所有允许使用 ToTraceString() 的示例都在使用 ExecuteStoreQuery() 然后将其转换为 ObjectQuery :/我不太确定后端发生了什么。
    猜你喜欢
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    相关资源
    最近更新 更多