基于this和this,我正在执行以下操作以获取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分析器工具:(
答案 0 :(得分:1)
使用ObjectContext时会创建ObjectQuery。当您使用DbContext时,它使用并创建DbQuery。另请注意,这实际上不是DbQuery
而是DbQuery<T>
。我相信在使用DbQueries时显示SQL,你可以在DbQuery实例上执行.ToString()
,因此不需要强制转换。请注意,不会显示参数值。最近在EF6中将参数值添加到输出中 - 如果您需要,可以尝试http://entityframework.codeplex.com