#595 – February 15, 2026
with Aspire, OpenTelemetry and Github Actions to build maintainable software faster
How to start a new .NET project in 2026
14 minutes by Anton Martyniuk
Starting a new .NET project can feel overwhelming, but the right foundation makes a big difference. Anton's guide shares seven key steps to improve code quality, consistency, and developer experience from day one. He covers project-wide settings, static analysis, coding standards, centralized package management, Aspire for local development, OpenTelemetry for monitoring, and GitHub Actions for automation to help you build reliable, maintainable software faster.
Auth That Deploys Anywhere. Self-hosted, cloud, air-gapped. Total control, no vendor lock-in.
sponsored by FusionAuth
FusionAuth deploys anywhere—self-hosted, private cloud, air-gapped, or fully managed—so you own your data and upgrade path. No multi-tenant noisy neighbor risks. No per-MAU pricing that punishes growth. Full OAuth 2.0/OIDC, SSO, MFA, and passkeys. This .NET quickstart gets you from zero to working auth in minutes, not days. Stop renting your identity infrastructure. Own it.
Lease pattern in .NET: A lock with an expiration date that saves your data
5 minutes by Chris Woodruff
Chris explains why indefinite locks fail in distributed systems and how leases solve the problem. A lease is a lock with a time limit that must be renewed. Using Redis, Chris shows how to safely acquire, renew, and release leases with tokens and atomic operations. The key rule is simple: if renewal fails, stop acting as the owner to prevent duplicate or stuck work.
Sometimes you just need extensions methods
2 minutes by Steven Giesel
Steven needed to handle partial entity updates without creating multiple DTOs. He built an `Optional` struct that wraps values with a `HasValue` flag, letting the backend distinguish between "not provided" and "set to null." This worked until he needed to merge non-nullable update values with nullable entity properties. Extension methods solved the problem by adding a generic overload that accepts nullable value types, allowing the type system to handle nullability differences between the DTO and entity models.
Creating and consuming metrics with System.Diagnostics.Metrics APIs
10 minutes by Andrew Lock
In this post Andrew provides an introduction to the System.Diagnostics.Metrics API, shows how to use dotnet-counters for local monitoring of metrics, and shows how to add a custom metric to your application.
Bulk operations in EF Core 10
less than a minute by Adrian Bailador
ExecuteUpdate and ExecuteDelete methods let you modify or remove database records directly without loading them into memory first. Adrian argues this approach is dramatically faster for bulk operations—up to 500 times quicker than traditional methods. Instead of retrieving thousands of entities, changing them, and saving them back, these methods execute the changes straight in the database.
And the most popular article from the last issue was: