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();

ただし、2行目で次の例外が発生します。

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

ObjectContext を使用すると、ObjectQuery が作成されます。DbContext を使用している場合、DbQuery を使用して作成します。また、これは実際にはDbQuerybutではないことに注意してくださいDbQuery<T>。DbQuery があるときに SQL を表示する.ToString()には、DbQuery インスタンスで実行できるので、キャストは必要ないと思います。ただし、パラメータ値は表示されないことに注意してください。パラメータ値は EF6 でごく最近出力に追加されました。これが必要な場合は、http: //entityframework.codeplex.com から最新のナイトリー ビルドを試すことができます。

于 2012-11-22T04:02:30.293 に答える