Entity Framework Core IQueryable によって生成された SQL を表示する方法
質問:
エンティティ内Framework Core では、IQueryable オブジェクトによって生成された SQL コードにどのようにアクセスしますか?以前のバージョンで使用できた ToTraceString() メソッドは、EF Core には存在しません。
答え:
EF Core 5/6 / Net 5/ 6
.NET 5 および EF Core 5 および 6 の場合6 では、ToQueryString() メソッドを使用できます:
var query = _context.Widgets.Where(w => w.IsReal && w.Id == 42); var sql = query.ToQueryString();
古いバージョンの .NET Core の場合は、拡張メソッドを使用できます:
Core 2.1.2
public static string ToSql<TEntity>(this IQueryable<TEntity> query) { // Reflection and casting voodoo to get EF internal classes var sql = ...; return sql; }
EF コア3.0
public static string ToSql<TEntity>(this IQueryable<TEntity> query) { using (var enumerator = query.Provider.Execute<IEnumerable<TEntity>>(query.Expression).GetEnumerator()) { // More reflection and casting voodoo var sql = ...; return sql; } }
EF Core 3.1
public static string ToSql<TEntity>(this IQueryable<TEntity> query) where TEntity : class { using (var enumerator = query.Provider.Execute<IEnumerable<TEntity>>(query.Expression).GetEnumerator()) { // Even more reflection and casting voodoo var sql = ...; return sql; } }
注:
以前の EF Core バージョンの場合~ 5 では、生成された SQL を取得するためにリフレクションが必要です。 IQueryable.
以上がEntity Framework Core IQueryable によって生成された SQL を表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。