# .NET · Tech watch

[Canonical source](<https://sebastien.rigaux.be/en/tech-watch/tags/dotnet>)

Microsoft’s development platform: runtime, libraries, SDK and cross-platform applications.

## [Finbuckle.MultiTenant: isolate tenants in a .NET application](<https://sebastien.rigaux.be/en/tech-watch/links/finbucklemultitenant-isolate-tenants-in-a-net-application>)

Finbuckle.MultiTenant provides ASP.NET Core with tenant resolution, per-tenant configuration, and data-isolation building blocks. A basic setup combines a host-based strategy, a configuration-backed store, and the `UseMultiTenant()` middleware.

The middleware must run before components that depend on the tenant, such as authentication and authorization. The library also includes integrations for per-tenant options, authentication, and Entity Framework Core data isolation.

2026-11-02 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/finbucklemultitenant-isolate-tenants-in-a-net-application.md>) · [Original resource](<https://www.finbuckle.com/MultiTenant/#getting-started>)

## [.NET multi-tenancy: move a tenant without downtime — part 4/4](<https://sebastien.rigaux.be/en/tech-watch/links/net-multi-tenancy-move-a-tenant-without-downtime-part-44>)

This installment explains how to move a tenant from a shared database to a dedicated one without taking the application offline or disrupting other tenants. The catalog drives the switch, while the same EF Core model and query filter serve both isolation modes.

The migration uses an initial copy, a temporary read-only window, a delta copy, and verification before cutover. The runbook waits for the cache to expire before reopening writes, preventing instances that still hold the old connection from writing to the shared database after the switch.

2026-11-02 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/net-multi-tenancy-move-a-tenant-without-downtime-part-44.md>) · [Original resource](<https://barretblake.dev/posts/development/2026/08/multi-tenant-moving-day/>)

## [.NET multi-tenancy: one database per tenant — Part 3/4](<https://sebastien.rigaux.be/en/tech-watch/links/net-multi-tenancy-one-database-per-tenant-part-34>)

With one database per tenant, EF Core no longer needs a global query filter, a `TenantId` column, or a tenant-specific model cache key: the tenant is selected through a connection string resolved from a catalog database.

This isolation simplifies the model but shifts complexity to operations: each migration must be applied to every database. The article also explains how `IDesignTimeDbContextFactory` lets `dotnet ef` create the context without an active request or tenant.

2026-11-02 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/net-multi-tenancy-one-database-per-tenant-part-34.md>) · [Original resource](<https://barretblake.dev/posts/development/2026/08/multi-tenant-part-3/>)

## [.NET multi-tenancy: isolate data by SQL Server schema — part 2/4](<https://sebastien.rigaux.be/en/tech-watch/links/net-multi-tenancy-isolate-data-by-sql-server-schema-part-24>)

Part 2/4 shows how to isolate each tenant’s data in its own SQL Server schema, without a global query filter or a required `TenantId` column. EF Core can use a simple primary key again, while the database structure itself enforces the isolation boundary.

The key change is model caching: `OnModelCreating` runs only once per model. The schema must be included in the cache key through `IModelCacheKeyFactory`, or EF Core may reuse the first tenant’s schema. The article also covers per-schema provisioning and migrations, plus strict validation of schema names interpolated into SQL.

2026-11-02 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/net-multi-tenancy-isolate-data-by-sql-server-schema-part-24.md>) · [Original resource](<https://barretblake.dev/posts/development/2026/07/multi-tenant-part-2/>)

## [.NET multi-tenancy: query isolation and SQL Server partitions — part 1/4](<https://sebastien.rigaux.be/en/tech-watch/links/net-multi-tenancy-query-isolation-and-sql-server-partitions-part-14>)

This first installment presents a shared-schema .NET multi-tenant design: EF Core filters reads by tenant, while SQL Server physically partitions rows to speed up data access. The key distinction is that partitioning is not a security boundary; isolation relies on the EF Core global query filter.

The article also explains resolving the tenant per request, assigning its ID to new rows, and adding partitions to migrations with raw SQL. The primary key must include `GuildId`, a constraint SQL Server imposes when partitioning a unique index.

2026-11-02 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/net-multi-tenancy-query-isolation-and-sql-server-partitions-part-14.md>) · [Original resource](<https://barretblake.dev/posts/development/2026/07/multi-tenant-part-1/>)

## [C\# 15 unions: exhaustive matching, with boxing to consider](<https://sebastien.rigaux.be/en/tech-watch/links/c-15-unions-exhaustive-matching-with-boxing-to-consider>)

C# 15 introduces the `union` keyword to represent a value drawn from several types without forcing them into a base class or losing their type information in `object`. Andrew Lock shows how `switch` expressions enforce handling every case, and how to declare unions such as `Result<T>`.

One performance detail to weigh: the generated implementation stores the value in an `object`, boxing value types. The article demonstrates a custom implementation using `TryGetValue` to avoid boxing in `switch` expressions.

2026-11-01 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/c-15-unions-exhaustive-matching-with-boxing-to-consider.md>) · [Original resource](<https://andrewlock.net/exploring-the-dotnet-11-preview-2-dotnet-gets-union-types/>)

## [C\#: IfItQuacks turns duck typing into a library](<https://sebastien.rigaux.be/en/tech-watch/links/c-ifitquacks-turns-duck-typing-into-a-library>)

IfItQuacks lets C# code accept objects that match an interface without implementing it or sharing a base class. The `[DuckTyped]` attribute invokes a source generator that checks compatibility at compile time and creates an adapter—without reflection or `dynamic`.

Anonymous types can also act as test stubs: an object such as `{ Name = "Steven", Age = 90 }` can satisfy an `IPerson` interface. Adapters also preserve identity by forwarding `Equals`, `GetHashCode`, and `ToString` to the wrapped instance.

2026-11-01 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/c-ifitquacks-turns-duck-typing-into-a-library.md>) · [Original resource](<https://steven-giesel.com/blogPost/41599817-4457-441e-b874-1a5c67f4e7cc>)

## [.NET range types as first-class domain objects](<https://sebastien.rigaux.be/en/tech-watch/links/net-range-types-as-first-class-domain-objects>)

CodoMetis.ValueRanges offers .NET range types to replace pairs of dates and their scattered logic. Its five variants—finite, unbounded on either side, infinite, and empty—make possible shapes and rules explicit, while operations such as `Contains` and `Overlaps` run in memory.

The companion EF Core package bridges the domain model to PostgreSQL: the same operations are translated into SQL operators through Npgsql. The article also explains the design trade-off: abstract records rather than structs, so each variant can be represented by a type hierarchy.

2026-11-01 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/net-range-types-as-first-class-domain-objects.md>) · [Original resource](<https://dev.to/caffeinatedcoder/the-interval-is-the-thing-modelling-range-types-as-first-class-domain-objects-in-net-3jha>)

## [Metalama generates C\# patterns and enforces architecture at build time](<https://sebastien.rigaux.be/en/tech-watch/links/metalama-generates-c-patterns-and-enforces-architecture-at-build-time>)

Metalama automates cross-cutting C# patterns with aspects that generate code at compile time, while checking architecture rules as you edit. The repetitive implementation stays out of business code and the repository, and one aspect can be applied to a method or to a set of methods selected in code.

For example, an aspect can wrap a method in `try/catch` to log its entry, result, and exceptions. Metalama also lets you preview and debug the transformed code, making those changes inspectable.

2026-10-30 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/metalama-generates-c-patterns-and-enforces-architecture-at-build-time.md>) · [Original resource](<https://postsharp.net/metalama>)

## [dotnetup: user-local .NET toolchain manager for frictionless installs](<https://sebastien.rigaux.be/en/tech-watch/links/dotnetup-user-local-net-toolchain-manager-for-frictionless-installs>)

Microsoft introduces `dotnetup`, a toolchain manager for .NET inspired by rustup and nvm, designed to simplify installing, updating, and managing multiple SDK and runtime versions without admin rights. The tool operates entirely in the user’s home directory, respects `global.json`, lets you track version channels or install daily builds, and streamlines cleanup of obsolete versions. It targets CI/CD use cases and aims for a unified experience across macOS, Linux, and soon Windows.

2026-10-20 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/dotnetup-user-local-net-toolchain-manager-for-frictionless-installs.md>) · [Original resource](<https://devblogs.microsoft.com/dotnet/introducing-dotnetup/>)

## [Major updates in .NET 11: runtime, libraries and SDK](<https://sebastien.rigaux.be/en/tech-watch/links/major-updates-in-net-11-runtime-libraries-and-sdk>)

This official Microsoft Learn page provides a comprehensive overview of what’s new in .NET 11, currently in release candidate. It details changes in the runtime (performance, native Async, JIT, WebAssembly), libraries (numeric APIs, compression, System.Text.Json, security, LINQ, etc.), SDK (CLI tools, testing, containers, OpenTelemetry), and C# 15 language features. Developers will find a summary of the main improvements, links to updates for ASP.NET Core, EF Core, Windows Forms and WPF, as well as key release dates. Ideal for planning migrations or exploring the new capabilities of the .NET platform.

2026-10-15 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/major-updates-in-net-11-runtime-libraries-and-sdk.md>) · [Original resource](<https://learn.microsoft.com/fr-fr/dotnet/core/whats-new/dotnet-11/overview>)

## [Produce deterministic .NET builds with Source Link](<https://sebastien.rigaux.be/en/tech-watch/links/produce-deterministic-net-builds-with-source-link>)

The article explains why identical inputs should produce identical binaries and how to configure Source Link. It uses NuGet Package Explorer to validate the resulting packages.

2025-09-13 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/produce-deterministic-net-builds-with-source-link.md>) · [Original resource](<https://mitchelsellers.com/blog/article/net-5-deterministic-builds-source-linking>)

## [Common pitfalls in asynchronous .NET programming](<https://sebastien.rigaux.be/en/tech-watch/links/common-pitfalls-in-asynchronous-net-programming>)

This guide collects recommendations on async, await, tasks and cancellation. It covers blocking caused by Task.Result or Task.Wait and discusses suitable alternatives.

2025-02-16 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/common-pitfalls-in-asynchronous-net-programming.md>) · [Original resource](<https://github.com/davidfowl/AspNetCoreDiagnosticScenarios/blob/master/AsyncGuidance.md>)

## [Vogen: generate value objects around .NET types](<https://sebastien.rigaux.be/en/tech-watch/links/vogen-generate-value-objects-around-net-types>)

Vogen wraps primitives in generated domain types. Its CustomerId example shows how to obtain comparisons and controlled construction without writing repetitive boilerplate.

2025-02-09 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/vogen-generate-value-objects-around-net-types.md>) · [Original resource](<https://stevedunn.github.io/Vogen/overview.html>)

## [NDC London 2025: topics from the .NET team](<https://sebastien.rigaux.be/en/tech-watch/links/ndc-london-2025-topics-from-the-net-team>)

This announcement outlines Microsoft’s planned sessions at NDC London 2025. Topics included .NET Aspire, cloud-native applications and AI integration with .NET.

2025-01-19 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/ndc-london-2025-topics-from-the-net-team.md>) · [Original resource](<https://devblogs.microsoft.com/dotnet/meet-the-dotnet-team-at-ndc-london-2025/>)

## [.NET code coverage tools gain cross-platform support](<https://sebastien.rigaux.be/en/tech-watch/links/net-code-coverage-tools-gain-cross-platform-support>)

Microsoft introduces static instrumentation and additional report formats, including Cobertura. These changes make coverage collection easier to integrate across environments and reporting tools.

2023-12-24 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/net-code-coverage-tools-gain-cross-platform-support.md>) · [Original resource](<https://devblogs.microsoft.com/dotnet/whats-new-in-our-code-coverage-tooling/>)

## [Structure a multi-tenant application with FinBuckle](<https://sebastien.rigaux.be/en/tech-watch/links/structure-a-multi-tenant-application-with-finbuckle>)

The article explains how FinBuckle.MultiTenant fits into ASP.NET Core through tenants, resolution strategies and stores. It provides a foundation for tenant isolation and tenant-specific behavior.

2023-09-10 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/structure-a-multi-tenant-application-with-finbuckle.md>) · [Original resource](<https://khalidabuhakmeh.com/posts/multi-tenancy-with-aspnet-core-and-finbuckle-multitenant/>)

## [Test .NET applications against real Docker services](<https://sebastien.rigaux.be/en/tech-watch/links/test-net-applications-against-real-docker-services>)

The guide introduces Testcontainers for starting and managing containerized dependencies in .NET tests. This brings integration tests closer to the services used by the application.

2023-09-09 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/test-net-applications-against-real-docker-services.md>) · [Original resource](<https://code-maze.com/csharp-testing-using-testcontainers-for-net-and-docker/>)

## [A free certification for learning C\# fundamentals](<https://sebastien.rigaux.be/en/tech-watch/links/a-free-certification-for-learning-c-fundamentals>)

Microsoft and freeCodeCamp introduce a C# certification with a 35-hour Microsoft Learn course. It provides a structured path for consolidating language fundamentals.

2023-08-30 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/a-free-certification-for-learning-c-fundamentals.md>) · [Original resource](<https://devblogs.microsoft.com/dotnet/announcing-foundational-csharp-certification/>)

## [Generate .NET builders that guide object construction](<https://sebastien.rigaux.be/en/tech-watch/links/generate-net-builders-that-guide-object-construction>)

This generator creates builders for classes, structs and records. Its steps require mandatory information before optional values while encouraging immutable objects.

2023-08-27 · [Markdown](<https://sebastien.rigaux.be/en/tech-watch/links/generate-net-builders-that-guide-object-construction.md>) · [Original resource](<https://github.com/bnayae/Bnaya.BuilderPatternGenerator>)

Page 1 / 2

[Next](<https://sebastien.rigaux.be/en/tech-watch/tags/dotnet/page/2>)
