Если у вас есть проблемы с производительностью LINQ-запросов, обратите внимание на новую фичу EF Core 5.0 под названием Query Splitting.
📌 Вызываем метод
AsSplitQuery
:dbContext
.Orders
.Include(order => order.LineItems)
.ThenInclude(lineItem => lineItem.Dimensions)
.AsSplitQuery()
.First(order => order.Id == orderId);
В этом случае EF Core сгенерирует следующие SQL-запросы:
SELECT o.*
FROM Orders o
WHERE o.Id = @orderId;
SELECT li.*
FROM LineItems li
JOIN Orders o ON li.OrderId = o.Id
WHERE o.Id = @orderId;
SELECT d.*
FROM LineItemDimensions d
JOIN LineItems li ON d.LineItemId = li.Id
JOIN Orders o ON li.OrderId = o.Id
WHERE o.Id = @orderId;
Для каждого оператора Include у нас есть отдельный SQL-запрос. Преимущество в том, что мы не дублируем данные при извлечении из БД.
📌 Включаем разделение запросов для всех запросов:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
"CONNECTION_STRING",
o => o.UseQuerySplittingBehavior(
QuerySplittingBehavior.SplitQuery)));
Все создаваемые EF Core запросы будут разделенными. Чтобы вернуться к одному запросу, нужно вызвать метод
AsSingleQuery
:dbContext
.Orders
.Include(o => o.LineItems)
.ThenInclude(li => li.Dimensions)
.AsSingleQuery()
.First(o => o.Id == orderId);
🔸Не существует гарантии согласованности для нескольких SQL-запросов. Вы можете столкнуться с проблемой, если одновременно с запросом происходит параллельное обновление.
🔸Чтобы смягчить это, вы можете обернуть запросы внутри транзакции, но это приведет только к проблемам с производительностью в других местах.
🔸Каждый запрос требует сетевого обращения. Если задержки при обращении к БД высоки, это может снизить производительность.
#dotnet #aspnet #tip by Milan Jovanovic
Please open Telegram to view this post
VIEW IN TELEGRAM
Milan Jovanović
How To Improve Performance With EF Core Query Splitting
I recently ran into an issue with Entity Framework Core. The query I was running was constantly timing out. So I used a new EF Core feature called Query Splitting to significantly improve my performance.
👍26🤔3❤1
💡 Вы используете Health Checks в ваших веб-приложениях? Если нет, пора воспользоваться этой мощной функцией 💪
🔧 Функциональность:
Health Checks предоставляют простой и стандартный способ мониторинга работоспособности вашего приложения и его зависимостей, таких как базы данных, кэш и внешние сервисы. Они позволяют легко предоставлять эндпоинты для проверки работоспособности, которые могут быть использованы инструментами мониторинга, упрощая обнаружение и устранение проблем.
🚀 Преимущества:
1️⃣ Повышение надежности приложения
2️⃣ Быстрое обнаружение и устранение проблем
3️⃣ Лучший пользовательский опыт за счет сокращения времени простоя
4️⃣ Упрощение мониторинга и обслуживания
📚 Лучшие практики:
✅ Реализуйте кастомные проверки работоспособности для удовлетворения специфических потребностей вашего приложения
✅ Используйте теги для категоризации проверок работоспособности и упрощения мониторинга
✅ Установите соответствующие коды ответов и типы содержимого для эндпоинтов проверки работоспособности
✅ Обеспечьте надлежащую аутентификацию и авторизацию для доступа к эндпоинтам проверки работоспособности
#dotnet #csharp #aspnet #tip by Adem Sahin
🔧 Функциональность:
Health Checks предоставляют простой и стандартный способ мониторинга работоспособности вашего приложения и его зависимостей, таких как базы данных, кэш и внешние сервисы. Они позволяют легко предоставлять эндпоинты для проверки работоспособности, которые могут быть использованы инструментами мониторинга, упрощая обнаружение и устранение проблем.
🚀 Преимущества:
1️⃣ Повышение надежности приложения
2️⃣ Быстрое обнаружение и устранение проблем
3️⃣ Лучший пользовательский опыт за счет сокращения времени простоя
4️⃣ Упрощение мониторинга и обслуживания
📚 Лучшие практики:
✅ Реализуйте кастомные проверки работоспособности для удовлетворения специфических потребностей вашего приложения
✅ Используйте теги для категоризации проверок работоспособности и упрощения мониторинга
✅ Установите соответствующие коды ответов и типы содержимого для эндпоинтов проверки работоспособности
✅ Обеспечьте надлежащую аутентификацию и авторизацию для доступа к эндпоинтам проверки работоспособности
#dotnet #csharp #aspnet #tip by Adem Sahin
👍21👏1