Если ты до сих пор считаешь, что EF Core медленный в 2025 году — ты застрял в прошлом
Одна из его новых фич — поддержка bulk-удалений
Теперь ты можешь удалить любое количество записей за один запрос к базе.
Представим, что e-commerce платформа хочет удалить все корзины, которые не обновлялись больше года.
С
Но помни: bulk-операции обходят EF Change Tracker.
EF Core предлагает много мощных фич для написания чистого и производительного кода.
> Вот 5, которые ты обязан знать: readme
🎧 🎧
👉 @KodBlog
Одна из его новых фич — поддержка bulk-удалений
Теперь ты можешь удалить любое количество записей за один запрос к базе.
Представим, что e-commerce платформа хочет удалить все корзины, которые не обновлялись больше года.
С
ExecuteDelete это делается эффективно: выполняется один SQL-запрос DELETE, который сразу удаляет все старые корзины.Но помни: bulk-операции обходят EF Change Tracker.
EF Core предлагает много мощных фич для написания чистого и производительного кода.
> Вот 5, которые ты обязан знать: readme
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤6🔥2😁1
Совет по Microsoft Visual Studio
Условная компиляция — отличный способ включать или исключать функциональность в зависимости от сценария деплоя.
Обычно используют
В свойствах проекта, на вкладке Build, можно задать свои собственные символы условной компиляции.
В этом примере используется пользовательский символ, чтобы определить — наследоваться от абстрактного класса или нет.
Важно иметь чёткие инструкции, в каких случаях применять такие символы, как в этом примере
Поддержи пост лайком если полезно❤️
👉 @KodBlog
Условная компиляция — отличный способ включать или исключать функциональность в зависимости от сценария деплоя.
Обычно используют
#if DEBUG, но что если условие не связано с режимом отладки или релиза?В свойствах проекта, на вкладке Build, можно задать свои собственные символы условной компиляции.
В этом примере используется пользовательский символ, чтобы определить — наследоваться от абстрактного класса или нет.
Важно иметь чёткие инструкции, в каких случаях применять такие символы, как в этом примере
Поддержи пост лайком если полезно
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤5
ReSharper теперь и в VS Code
Легендарный инструмент для C# разработчиков добрался до лёгкого редактора.
До этого ReSharper работал только в Visual Studio, теперь — прямо в твоем VS Code.
> Умные подсказки и автодополнение
> Продвинутый анализ кода
> Быстрые рефакторинги
> Навигация как в Rider
Редактор поменялся — ReSharper остался💪
> Подробнее: https://jb.gg/rs-in-vscode-tw
👉 @KodBlog
Легендарный инструмент для C# разработчиков добрался до лёгкого редактора.
До этого ReSharper работал только в Visual Studio, теперь — прямо в твоем VS Code.
> Умные подсказки и автодополнение
> Продвинутый анализ кода
> Быстрые рефакторинги
> Навигация как в Rider
Редактор поменялся — ReSharper остался
> Подробнее: https://jb.gg/rs-in-vscode-tw
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤7🤯2
Новый API для поддержки динамически генерируемых схем OpenAPI в документации, появившийся в
🐸 🐸
👉 @KodBlog
ASP.NET 10 Preview 4Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3
Совет по LINQ:
Вызывай
Почему?
> В первом случае всё загружается в память до фильтрации
> Во втором — фильтрация происходит на источнике, что лучше для БД или больших коллекций
> Особенно важно при работе с EF Core или API, использующих
🎉 🎉
👉 @KodBlog
Вызывай
ToList() после фильтрации, а не до.Почему?
> В первом случае всё загружается в память до фильтрации
> Во втором — фильтрация происходит на источнике, что лучше для БД или больших коллекций
> Особенно важно при работе с EF Core или API, использующих
IQueryablePlease open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥5😁5🤯1
ASP dotnet: кастомный файл инструкций для GitHub Copilot
Создание файла
Выше — фрагмент текущего файла инструкций для репозитория dotnet/aspnetcore, который был слит менее часа назад.
Эта функция сейчас находится в превью и поддерживается в Copilot Chat для Visual Studio, VS Code и на сайте GitHub. Также поддерживается агентом Copilot для написания кода.
Что думаете?💪
👉 @KodBlog
Создание файла
copilot-instructions.md позволяет задать дополнительные инструкции для Copilot, чтобы его ответы были адаптированы под конкретный репозиторий.Выше — фрагмент текущего файла инструкций для репозитория dotnet/aspnetcore, который был слит менее часа назад.
Эта функция сейчас находится в превью и поддерживается в Copilot Chat для Visual Studio, VS Code и на сайте GitHub. Также поддерживается агентом Copilot для написания кода.
Что думаете?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3
This media is not supported in your browser
VIEW IN TELEGRAM
Часто при создании моделей я сначала пишу их в одном файле, а уже потом с помощью ReSharper быстро раскидываю каждую модель в отдельный файл — буквально в пару кликов мышкой.
Такой подход лично для меня удобнее:
> не нужно сразу прыгать между десятками файлов
> всё видно и правится в одном месте
> а уже потом ReSharper сам всё красиво разносит по файлам
— Гайд: Как ReSharper разносит классы по файлам
👉 @KodBlog
Такой подход лично для меня удобнее:
> не нужно сразу прыгать между десятками файлов
> всё видно и правится в одном месте
> а уже потом ReSharper сам всё красиво разносит по файлам
— Гайд: Как ReSharper разносит классы по файлам
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍6
Следует ли перестать использовать случайные UUID в .NET?
Традиционные UUID (
Они вызывают:
> Дорогую переработку индексов
> Плохую производительность при вставке
> Высокую фрагментацию
Поэтому многие разработчики перешли на ULID — 128-битные, сортируемые и по-прежнему уникальные.
Они сохраняют временной порядок, что делает их более дружелюбными к индексам.
Но теперь появилось новое:
✅
UUID версии 7 упорядочены по времени и совместимы с ULID, без необходимости в сторонних пакетах.
Вы получаете преимущества ULID, но с нативной поддержкой в
Перейдёте ли вы с ULID на UUID V7?🤔
👉 @KodBlog
Традиционные UUID (
Guid.NewGuid()) являются случайными — это хорошо для уникальности, но плохо с точки зрения производительности базы данных.Они вызывают:
> Дорогую переработку индексов
> Плохую производительность при вставке
> Высокую фрагментацию
Поэтому многие разработчики перешли на ULID — 128-битные, сортируемые и по-прежнему уникальные.
Они сохраняют временной порядок, что делает их более дружелюбными к индексам.
Но теперь появилось новое:
Guid.CreateVersion7() в .NET 9UUID версии 7 упорядочены по времени и совместимы с ULID, без необходимости в сторонних пакетах.
Вы получаете преимущества ULID, но с нативной поддержкой в
.NET.Перейдёте ли вы с ULID на UUID V7?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤3👍3🥴2
Хочешь поднять свой TCP / UDP / WebSocket сервер без
SuperSocket — фреймворк для .NET с мощной архитектурой
—> TCP, UDP, WebSocket из коробки
—> Свои протоколы через pipeline-фильтры
—> Middleware, сессии, команды, DI, логи
—> Кроссплатформенный, high-perf, MIT
💖
👉 @KodBlog
ASP.NET?SuperSocket — фреймворк для .NET с мощной архитектурой
—> TCP, UDP, WebSocket из коробки
—> Свои протоколы через pipeline-фильтры
—> Middleware, сессии, команды, DI, логи
—> Кроссплатформенный, high-perf, MIT
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2🔥1
Кэширование решает проблемы кэширования.
А дальше остаются проблемы, которые кэш не решает.
Я использую паттерн Cache-Aside (он же ленивая загрузка) для ускорения API.
Как это работает:
> Если данные есть в кэше → вернуть их
> Если нет → взять из базы данных и положить в кэш
Это происходит, когда:
> Данные ещё не кэшированы
> Кэш истёк или был очищен
Простой способ повысить производительность при чтении.
Вот короткий гайд, как применить это в своём приложении: тут
👉 @KodBlog
А дальше остаются проблемы, которые кэш не решает.
Я использую паттерн Cache-Aside (он же ленивая загрузка) для ускорения API.
Как это работает:
> Если данные есть в кэше → вернуть их
> Если нет → взять из базы данных и положить в кэш
Это происходит, когда:
> Данные ещё не кэшированы
> Кэш истёк или был очищен
Простой способ повысить производительность при чтении.
Вот короткий гайд, как применить это в своём приложении: тут
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4🍌2😁1🤔1
99% разработчиков ошибаются в обработке исключений
А вот что делает оставшийся 1%:
Они используют глобальный обработчик исключений.
Начиная с .NET 8, можно создать класс, реализующий
Внутри обработчика можно залогировать исключение и вернуть ProblemDetails клиенту API.
Можно также зарегистрировать несколько реализаций
Предсказать все исключения невозможно.
Но можно перехватить их все в одном месте.❤️
👉 @KodBlog
А вот что делает оставшийся 1%:
Они используют глобальный обработчик исключений.
Начиная с .NET 8, можно создать класс, реализующий
IExceptionHandler, чтобы перехватывать все необработанные исключения.Внутри обработчика можно залогировать исключение и вернуть ProblemDetails клиенту API.
Можно также зарегистрировать несколько реализаций
IExceptionHandler — они будут вызываться в порядке регистрации.Предсказать все исключения невозможно.
Но можно перехватить их все в одном месте.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤3👏3😐2😁1
В 🥳
Passkey — это новый способ входа в систему без пароля, основанный на стандартах FIDO2/WebAuthn.
Вместо ввода пароля, пользователь подтверждает вход с помощью:
> Face ID или Touch ID (на телефоне или ноутбуке)
> PIN-кода
> внешнего ключа безопасности (например, YubiKey)
👉 @KodBlog
ASP.NET 10 появится поддержка Passkey Passkey — это новый способ входа в систему без пароля, основанный на стандартах FIDO2/WebAuthn.
Вместо ввода пароля, пользователь подтверждает вход с помощью:
> Face ID или Touch ID (на телефоне или ноутбуке)
> PIN-кода
> внешнего ключа безопасности (например, YubiKey)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🎉3❤2🤔2
20 идей для пет-проектов на .NET
Хочешь прокачаться — пиши реальные приложения
> Трекер личных финансов
> Трекер привычек
> Журнал тренировок
> To‑Do список
> Дашборд погоды
> Простая блог-платформа
> Мини-соцсеть
> Фото-галерея
> Онлайн-магазин
> Генератор счетов
> Умный подбор рецептов
> Сокращатель ссылок
> Планировщик встреч
> Канбан-доска для команды
> Система управления документами
> Приложение для записи на приём
> Сервис вызова такси
> Сайт для поиска работы
> Сравнение резюме с вакансиями
> Дашборд для умного дома
👉 @KodBlog
Хочешь прокачаться — пиши реальные приложения
> Трекер личных финансов
> Трекер привычек
> Журнал тренировок
> To‑Do список
> Дашборд погоды
> Простая блог-платформа
> Мини-соцсеть
> Фото-галерея
> Онлайн-магазин
> Генератор счетов
> Умный подбор рецептов
> Сокращатель ссылок
> Планировщик встреч
> Канбан-доска для команды
> Система управления документами
> Приложение для записи на приём
> Сервис вызова такси
> Сайт для поиска работы
> Сравнение резюме с вакансиями
> Дашборд для умного дома
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15😁1
Времена жизни (Lifetimes) в .NET DI:
> Singleton — один экземпляр на всё приложение
> Scoped — один экземпляр на каждый запрос
> Transient — новый экземпляр каждый раз при запросе
Важно помнить:
– Нельзя внедрять Scoped/Transient в Singleton — это может привести к утечкам памяти
– Используй Singleton только для безсостояний или потокобезопасных сервисов
👉 @KodBlog
> Singleton — один экземпляр на всё приложение
> Scoped — один экземпляр на каждый запрос
> Transient — новый экземпляр каждый раз при запросе
Важно помнить:
– Нельзя внедрять Scoped/Transient в Singleton — это может привести к утечкам памяти
– Используй Singleton только для безсостояний или потокобезопасных сервисов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤4
Хочешь сделать .NET-приложение более устойчивым?
Вот 4 простые стратегии:
> Retry — повторить попытку после сбоя
> Timeout — прекратить ожидание после тайм-аута
> Fallback — вернуть безопасное значение
> Circuit breaker — заблокировать постоянные сбои
Эти приёмы помогают справляться с временными ошибками и не падать при каждом чихе.
Раньше для этого чаще всего использовали Polly.
🆕 А в .NET 8 появилась новая Microsoft Resilience Library, построенная поверх Polly.
Хочешь разобраться глубже?
Вот как повысить устойчивость твоего приложения > read
👉 @KodBlog
Вот 4 простые стратегии:
> Retry — повторить попытку после сбоя
> Timeout — прекратить ожидание после тайм-аута
> Fallback — вернуть безопасное значение
> Circuit breaker — заблокировать постоянные сбои
Эти приёмы помогают справляться с временными ошибками и не падать при каждом чихе.
Раньше для этого чаще всего использовали Polly.
Хочешь разобраться глубже?
Вот как повысить устойчивость твоего приложения > read
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍3💯2
Создание кастомного GPT в ChatGPT может быть крайне полезным.
Например, разработчик хочет заменить SqlClient-операции на Dapper и ему предстоит проделать это множество раз.
С помощью кастомного GPT можно избежать постоянного ввода промптов — достаточно просто вставить код и получить результат.
В этом случае я создал инструкцию в Microsoft Word, сохранил её в PDF и загрузил в кастомного GPT💪
👉 @KodBlog
Например, разработчик хочет заменить SqlClient-операции на Dapper и ему предстоит проделать это множество раз.
С помощью кастомного GPT можно избежать постоянного ввода промптов — достаточно просто вставить код и получить результат.
В этом случае я создал инструкцию в Microsoft Word, сохранил её в PDF и загрузил в кастомного GPT
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10🔥2
Я больше 6 лет работаю с Clean Architecture — и вот почему она мне реально зашла
Самая большая проблема в энтерпрайз-проектах — бардак в структуре.
Каждый делает по-своему:
> Свои слои, свои подходы, свои велосипеды.
> Знания с проекта на проект не переносятся.
Clean Architecture это чинит.
Это не про количество проектов или навороченные паттерны.
Это про направление зависимостей.
> Внутренние слои (domain, application) описывают абстракции.
> Внешние (infrastructure, UI) — их реализуют.
Никогда наоборот.
Вот и всё. Всё остальное — вариации:
> Классические слои: domain / app / infra / web
> Вертикальные срезы по фичам
> Или компоненты, которые сочетают и то, и другое
Любая схема работает, если держаться этого правила.
Что в итоге получаешь:
✅ Модули, которые легко переиспользовать
✅ Понятное разделение, кто за что отвечает
✅ Логика легко покрывается тестами
✅ Новым людям проще влиться
✅ Компоненты слабо связаны — меньше проблем при изменениях
Clean Architecture реально помогает выпускать продуманный, поддерживаемый код. Я ей продолжаю пользоваться — потому что это просто работает.
👉 @KodBlog
Самая большая проблема в энтерпрайз-проектах — бардак в структуре.
Каждый делает по-своему:
> Свои слои, свои подходы, свои велосипеды.
> Знания с проекта на проект не переносятся.
Clean Architecture это чинит.
Это не про количество проектов или навороченные паттерны.
Это про направление зависимостей.
> Внутренние слои (domain, application) описывают абстракции.
> Внешние (infrastructure, UI) — их реализуют.
Никогда наоборот.
Вот и всё. Всё остальное — вариации:
> Классические слои: domain / app / infra / web
> Вертикальные срезы по фичам
> Или компоненты, которые сочетают и то, и другое
Любая схема работает, если держаться этого правила.
Что в итоге получаешь:
Clean Architecture реально помогает выпускать продуманный, поддерживаемый код. Я ей продолжаю пользоваться — потому что это просто работает.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥6👍3
Как я импортировал более 5 000 000 записей в базу данных:
(за 89 секунд)
Недавно мне нужно было выполнить большую миграцию данных.
После изучения доступных вариантов я выбрал SQLBulkCopy.
SQLBulkCopy позволяет импортировать большие объёмы данных напрямую в таблицы SQL Server.
Также он поддерживает транзакции — можно откатить весь импорт в случае ошибки.
У меня нет бенчмарков, но в моём случае импорт завершился за 89 секунд💪
P.S. Вы использовали SQLBulkCopy?
👉 @KodBlog
(за 89 секунд)
Недавно мне нужно было выполнить большую миграцию данных.
После изучения доступных вариантов я выбрал SQLBulkCopy.
SQLBulkCopy позволяет импортировать большие объёмы данных напрямую в таблицы SQL Server.
Также он поддерживает транзакции — можно откатить весь импорт в случае ошибки.
У меня нет бенчмарков, но в моём случае импорт завершился за 89 секунд
P.S. Вы использовали SQLBulkCopy?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3🤔3🔥1
В .NET 10 снижена «надбавка» за использование
В .NET 9 перебор массива через👏
Что думаете?
👉 @KodBlog
IEnumerable с 83% до 10%В .NET 9 перебор массива через
IEnumerable обходился на 83% дороже, чем прямой перебор массива, тогда как в .NET 10 эта разница составила всего 10% Что думаете?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥33👍14❤2