What's New in EF Core 10: A Map
Objective
EF Core 10 shipped in November 2025 as a Long Term Support release, and the "What's new" page lists dozens of items across providers, modeling, querying and security. This concept is a map, not a tutorial: it groups the headline changes, says in a few lines what each one does, and points to the concept in this track that goes deep. Items that have no deep concept yet are only described here.
After reading it you should know which changes can affect an upgrade, which ones are optional features, and where to read next.
Use Cases
- Planning the move from EF Core 8 or 9 to 10 and deciding what to test first.
- Reviewing a pull request that uses a new API such as a named query filter.
- Explaining to a team which new features need SQL Server 2025 or Azure SQL and which work on any provider.
- Finding the right deep concept without reading the whole release page.
Deep Dive
Release basics
The official page states that EF Core 10 requires the .NET 10 SDK to build and
the .NET 10 runtime to run, and that it will not run on earlier .NET versions or
on .NET Framework. It is an LTS release supported until November 10, 2028. The
support model and how to choose a target is in
dotnet-support-lifecycle-and-choosing-a-target.
Modeling: complex types and JSON
Complex types gained the most. They now support optional values (the type needs
at least one required property), mapping to a JSON column with ToJson, and
.NET structs (collections of structs are not supported yet). The page explains
why complex types are a better choice than owned entities for table splitting
and JSON: value semantics, comparison by content, assignment that copies.
Existing owned-type mappings are advised to move over.
On SQL Server 2025 and Azure SQL the native json type becomes the default when
you configure UseAzureSql or compatibility level 170 or higher. Existing
nvarchar JSON columns change to json in the next migration unless you opt
out. Read json-columns-and-complex-types for the details, and
mapping-the-domain-with-ef-core for value objects in general.
Updates: ExecuteUpdate
Two changes touch ExecuteUpdateAsync. It can reference JSON columns and the
properties inside them, but only when the types are mapped as complex types. And
it now accepts a regular lambda instead of an expression tree, so a conditional
SetProperty is an ordinary if. The JSON side lives in
json-columns-and-complex-types, the set-based update in general in
query-translation-and-performance and ef-core-crud-operations-and-seeding.
Querying
- Named query filters.
HasQueryFiltertakes a name, andIgnoreQueryFilterscan disable only some filters per query. Soft delete and tenant filters can now coexist on one entity. Seeglobal-and-named-query-filters. - Parameterized collections. The new default sends each element as its own
scalar parameter and pads the list to limit distinct SQL texts. You can switch
strategy globally with
UseParameterizedCollectionModeor per query withEF.Constant. This is described on the page; the closest deep concept isquery-translation-and-performance. LeftJoinandRightJoin. The .NET 10 LINQ operators are recognized by EF Core and translated toLEFT JOINandRIGHT JOIN. Query syntax cannot express them yet. Also covered byquery-translation-and-performance.- Split queries. Ordering is now consistent between the queries of an
AsSplitQuerycall. Seeloading-related-data-and-n-plus-one. - Smaller items include new translations such as
DateOnly.ToDateTime()and simpler parameter names (@cityinstead of@__city_0).
Security
Constants inlined into SQL, for example through EF.Constant, are redacted from
logs as ? unless sensitive data logging is on. An analyzer warns when you
concatenate strings inside FromSqlRaw. Logging is in
ef-core-logging-query-tags-and-diagnostics, raw SQL in
query-translation-and-performance.
SQL Server and Azure SQL
Besides the json type, EF Core 10 supports the vector type through
SqlVector<float> and the VectorDistance function, available on Azure SQL
Database and SQL Server 2025. HasDefaultValueSql accepts a constraint name, and
UseNamedDefaultConstraints names all of them; with existing migrations the
next one renames every default constraint. There is no deep concept for vector
search in this track yet.
Cosmos DB
Full-text search (EnableFullTextSearch, IsFullTextIndex, FullTextContains
and related functions), hybrid search through Rrf, vector search leaving
preview with IsVectorProperty and IsVectorIndex, and required properties
that materialize a default when an old document lacks them. Choosing between
relational and document stores is in ef-core-ado-net-dapper-and-nosql.
Migrations and other items
EF Core 10 stops wrapping all pending migrations in one transaction, reverting a
change from EF Core 9. See applying-migrations-in-production and
ef-core-migrations-workflow. SQLite also lets you disable AUTOINCREMENT.
Trade-offs
- A map is not a guide. Each summary omits caveats the deep concept covers, such as JSON mapping limits. Follow the link before adopting a feature.
- Defaults changed silently. The
jsoncolumn type, parameter padding and per-migration transactions can alter behavior without a code edit. Check the breaking changes page and run your migrations on a copy. - Several features are provider specific. Vector, native
jsonand Cosmos search do not exist on every database, so code using them is less portable. - Choose complex types for new value objects. Owned entities still work, but
the page steers JSON and table splitting to complex types, and
ExecuteUpdateover JSON needs them. - Named filters add rules to remember. More filters means more places a query can be silently narrower than you expect.