この「 。NET Core 2.0リリース! 」ビデオの終わりから3:15に、Diego VegaはEntity Framework Core 2.0の新機能のデモを示しています。その一部として、基礎となるSQLのダンプがコンソールアプリに表示されます。
Stack Overflowで多くの回答を見てきましたが、SQLプロファイラーを使用して基になるクエリを表示することを示唆しています。しかし今、私は興味があります。DiegoVegaが行ったことをどのように実行し、クエリをアプリケーションに表示することができますか?
https://docs.Microsoft.com/en-us/ef/core/miscellaneous/logging
DbContext
のOnConfiguringメソッドでは、ロガーを設定できます。ログインコンソールは事前定義されたタイプであり、単に this NuGet を使用します。ロガーインスタンスのファクトリパターンの使用がベストプラクティスであることに注意してください。
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseLoggerFactory(MyLoggerFactory) // Warning: Do not create a new ILoggerFactory instance each time
.UseSqlServer(
@"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True;ConnectRetryCount=0");
こんにちは、次のようにして、Entity Framework Coreが生成したSQLコードを出力ウィンドウに表示できます。 DbContext
クラスで:
public static readonly Microsoft.Extensions.Logging.LoggerFactory _myLoggerFactory =
new LoggerFactory(new[] {
new Microsoft.Extensions.Logging.Debug.DebugLoggerProvider()
});
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseLoggerFactory(_myLoggerFactory);
}
デバッグロガーは、デバッガーが接続されている場合にのみ、デバッグ出力ウィンドウにメッセージを書き込みます。
以下を実行する必要があります。
私は受け入れられた答えがうまくいくと確信していますが、DIを使用してこれを行う方法を知りたいので...
private readonly ILoggerFactory loggerFactory;
public MyDataContext(DbContextOptions<MyDataContext> options, ILoggerFactory loggerFactory)
: base(options)
{
this.loggerFactory = loggerFactory;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Allow null if you are using an IDesignTimeDbContextFactory
if (loggerFactory != null)
{
if (Debugger.IsAttached)
{
// Probably shouldn't log sql statements in production
optionsBuilder.UseLoggerFactory(this.loggerFactory);
}
}
}
ASP.NET Core MVCフレームワークに基づいてAPIまたはAppサービスを作成している場合は、Startup.cs
このようなクラス
public void ConfigureServices(IServiceCollection services)
{
...
Action<DbContextOptionsBuilder> dbOptionsContextBuilder = builder =>
{
builder.UseSqlServer(Configuration.DbConnection) // Configuration.DbConnection is the db connection string
.UseLoggerFactory(ConsoleLoggerFactory); // Logs out SQL
};
services.AddDbContext<YourDatabaseContext>(dbOptionsContextBuilder);
...
}
ここで、ConsoleLoggerFactory
は以前に次のように定義されています。
private static readonly LoggerFactory ConsoleLoggerFactory = new LoggerFactory(new[] { new ConsoleLoggerProvider((_, __) => true, true) });