0

基于thisthis,我正在执行以下操作以获取 Entity Framework 5.0 生成的 SQL

var query = from s in db.ClassesDetails
            where s.ClassSet == "SetOne"
            orderby s.ClassNum
            select s.ClassNum;
var objectQuery = (System.Data.Objects.ObjectQuery)query; // <= problem!
var sql = objectQuery.ToTraceString();

但是在第二行我得到以下异常:

Unable to cast object of type 'System.Data.Entity.Infrastructure.DbQuery`1[System.Int16]' to type 'System.Data.Objects.ObjectQuery'.

自从发布了这些 SO 答案后,有什么变化吗?我需要做什么才能将查询作为字符串?我们正在针对 Azure SQL 运行,因此无法运行通常的 SQL 分析器工具 :(

4

1 回答 1

1

ObjectQuery 是在您使用 ObjectContext 时创建的。当您使用 DbContext 时,它会使用并创建 DbQuery。另外,请注意,这实际上不是 a DbQuerybut DbQuery<T>。我相信要在拥有 DbQuery 时显示 SQL,您只需.ToString()在 DbQuery 实例上执行,因此不需要强制转换。请注意,参数值不会显示。最近在 EF6 中将参数值添加到了输出中 - 如果您需要这个,您可以尝试来自http://entityframework.codeplex.com的最新夜间构建

于 2012-11-22T04:02:30.293 回答