Back to Podcast Digest
dotnet··1h 2m

.NET Data Community Standup: Lightweight Framework to Automate EF Components

TL;DR

  • EF Core 11 Preview 3 quietly fixes expensive SQL patterns — The team called out a big SQL Server query-generation improvement where EF no longer adds unnecessary ORDER BY clauses for certain one-to-one joins, reducing wasted database work.

  • Preview 3 also adds practical developer APIs, not just flashy features — New bits include GetEntriesForState on the change tracker, DI cleanup methods like RemoveDbContext, migration support to exclude foreign keys, and JSON helpers such as SQL Server JSON_CONTAINS and relational JSON_PATH_EXISTS.

  • Vector search support is already landing in EF Core 11 — Shai highlighted support for the latest Azure SQL vector index/vector search setup in Preview 3, while warning that the API is still evolving and aimed at people comfortable on the bleeding edge.

  • Guest Klaus pitched a reflection-heavy framework that auto-generates EF-based APIs from models — His “do nothing what anybody else can do for you” approach produces about 15 CRUD-style endpoints per entity at runtime, driven mainly by model attributes and a base DataContext.

  • The framework’s big promise is speed: model-first apps with auth, Swagger, translation, and messaging included — Klaus showed a setup where adding two lines in Program.cs, a few settings files, and annotated entities can generate controllers, Swagger docs, seeding, migrations, and even an identity service.

  • The most debated part was custom auth and open-ended query expressions — Klaus demoed sending serialized LINQ-style expressions to the server and using his own identity/authorization layer; Shai repeatedly pressed on security, maintainability, and why not use established auth systems like Duende or Microsoft’s defaults.

The Breakdown

EF Core 11 Preview 3 opens the show

The standup starts with the usual chaos and jokes, then quickly gets into EF Core 11 Preview 3. Yi runs through the release notes: GetEntriesForState, DI removal helpers like RemoveDbContext, migration support for excluding foreign keys, and JSON query helpers across providers.

A small SQL change that could save real database work

The biggest runtime win they call out is on SQL generation for one-to-one joins: EF used to emit extra ORDER BY clauses that weren’t actually needed. Shai sounds especially happy about this one because it not only makes the generated SQL cleaner, but cuts pointless processing on the database side.

Vector search support sneaks into EF Core 11

Shai adds one more feature Yi forgot: support for the latest Azure SQL vector index and vector search capabilities. He’s careful to say it’s still evolving for Preview 4, but if you’re already on Preview 3 and comfortable living on the edge, EF can already talk to the newest version.

Klaus introduces a framework built on “developer laziness”

Guest Klaus, a developer from near Hamburg with nearly 40 years of experience, frames his whole project around one credo: “Do nothing what anybody else can do for you.” His pitch is a lightweight framework for .NET 7-10 that uses standard .NET mechanisms and reflection to automate the repetitive EF Core plumbing.

The core demo: annotate models, get endpoints for free

Klaus shows a setup where models marked with interfaces and attributes like AdvancedTableInfo are discovered automatically, and the framework spins up around 15 endpoints per entity with no handwritten controller code. He emphasizes strongly typed clients, automatic DI registration, Swagger/OpenAPI, paging, seeding, migrations, and shared settings composition from multiple files.

Runtime-generated APIs and serialized expressions

In Swagger, he demonstrates generic endpoints like get-all, get-by-id, and get-by-expression, saying he can start prototyping with just those. The most interesting bit is that queries are passed as serialized LINQ-style expressions, then deserialized server-side and executed through EF, which gets Shai immediately asking what package handles that conversion and how safe it is.

Identity, separate services, and the security pushback

Klaus then switches to a second example: an identity service running as its own schema or even its own database, with login, roles, groups, permissions, registration, email confirmation, and token-based auth integrated into the framework. He also shows a developer-mode switch that disables authentication via settings, which he says makes iteration much easier.

The sharpest exchange: custom auth, scope creep, and pricing

The final stretch turns into a real design debate. Shai questions how a mostly solo project can responsibly own such a broad surface area — especially identity, which “famously nobody should implement” lightly — and asks why not use established options like Duende or Microsoft defaults; Klaus replies that he wanted identity “in my own hands,” plus some custom security flows like YubiKey and OTP tied to his own server. He closes by saying the framework is available with a trial, priced at €20 per month, and expects the new version to go live the following week.