#c# #asp.net-core-3.1 #ef-core-3.1 #mvc-mini-profiler #miniprofiler
#c# #asp.net-core-3.1 #ef-core-3.1 #mvc-mini-profiler #минипрофилер
Вопрос:
Мини-профилировщик не показывает никакой статистики по sql-запросам
Я выполняю настройку в соответствии с документацией и примером приложения: https://miniprofiler.com/dotnet/HowTo/ProfileEFCore
https://github.com/MiniProfiler/dotnet/blob/main/samples/Samples .AspNetCore3/Startup.cs
вот мой Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyDbContext>(options => options.UseNpgsql ("connstring..."));
services.AddMiniProfiler()
.AddEntityFramework();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseMiniProfiler();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
...
});
}
и пример вызова sql-запроса
await using (var context = scope.ServiceProvider.GetRequiredService<MyDbContext>())
{
var myDatas = context.Datas.AsNoTracking()
.Where(x => x.StartTime > now );
foreach (var myData in myDatas)
{
...
}
после выполнения этого запроса я проверяю страницы со статистикой мини-профилировщика:
https://localhost:port/mini-profiler-resources/results-index
https://localhost:port/mini-profiler-resources/results?id=GUID
и видите только это:
| | duration (ms)| with children (ms) | from start (ms)
| https://localhost:port/logins/| 231.9 | 236.5 | 0.0
| MiniProfiler Init | 4.5 | 4.6 | 0.0
| Get Profiler IDs | 0.1 | 0.1 | 4.5
Что я пропустил? Почему я не вижу статистику по SQL-запросам?
Ответ №1:
Понял это. Необходимо было обернуть вызовы в базу данных, обратившись к мини-профилировщику.
пример кода из этой статьи: https://dotnetthoughts.net/using-miniprofiler-in-aspnetcore-webapi /
using (MiniProfiler.Current.Step("PUT method"))
{
WeatherForecast weatherForecastById = null;
using (MiniProfiler.Current.Step("Getting Weather Forecase for the Id"))
{
weatherForecastById = GetWeatherForecast(id);
}
if (weatherForecastById == null)
{
return NotFound();
}
if (weatherForecastById.Id != id)
{
return BadRequest();
}
using (MiniProfiler.Current.Step("Updating the Data"))
{
_databaseContext.Entry(weatherForecast).State = EntityState.Modified;
_databaseContext.SaveChanges();
}
return NoContent();
}