请参阅EntityFramework生成的SQL命令:Cast异常

时间:2012-11-22 00:25:15

标签: sql entity-framework

基于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分析器工具:(

1 个答案:

答案 0 :(得分:1)

使用ObjectContext时会创建ObjectQuery。当您使用DbContext时,它使用并创建DbQuery。另请注意,这实际上不是DbQuery而是DbQuery<T>。我相信在使用D​​bQueries时显示SQL,你可以在DbQuery实例上执行.ToString(),因此不需要强制转换。请注意,不会显示参数值。最近在EF6中将参数值添加到输出中 - 如果您需要,可以尝试http://entityframework.codeplex.com

的最新夜间构建