EF Core 8 (EF8)
EF Core 8 (EF8) is available from NuGet
EF8 contains many new features and enhancements, including:
- Allow Multi-region or Application Preferred Regions in EF Core Cosmos
- Use C# structs or classes as value objects
- Support primitive collections in the compiled model
- Migrations and model snapshot for primitive collections
- Query: add support for projecting JSON entities that have been composed on
- SQLite: Add EF.Functions.Unhex
- Add type mapping APIs to customize JSON value serialization/deserialization
- SQL Server Index options SortInTempDB and DataCompression
- Analyzer: warn (and code fix) for use of interpolation in SQL methods accepting raw strings
- Translate Contains to IN with subquery instead of EXISTS where relevant
- Allow inline primitive collections with parameters, translating to VALUES
- Translate DateOnly.FromDateTime
- Implement JSON serialization/deserialization via Utf8JsonReader/Utf8JsonWriter
- Update pattern for scaffolding column default constraints
- Use IN instead of EXISTS with ExecuteDelete and entity containment
- Allow ExecuteUpdate to update properties of multiple queries as long as the map to a single table
- Query: add support for projecting primitive collections from JSON entities
- Switch to storing enums as ints in JSON instead of strings
- Translate DegreesToRadians
- Metadata and type mapping support for primitive collections
- JSON type representations and conversions to store types
- Allow stripping away all model building code to reduce application size
- Json: add support for collection of primitive types inside JSON columns
- Support LINQ querying of non-primitive collections within JSON
- SQLite RevEng: Sample data to determine CLR type
- Allow default value check in value generation to be customized
- Update handling of non-nullable store-generated properties
- IN() list queries are not parameterized, causing increased SQL Server CPU usage
- Allow 'unsharing' connection between contexts
- Remove unneeded subquery and projection when using ordering without limit/offset in set operations
- Make SequentialGuidValueGenerator non-allocating
- Support querying over primitive collections
- JSON/Sqlite: use -> and ->> where possible when traversing JSON, rather than json_extract
- Add Generic version of EntityTypeConfiguration Attribute
- NativeAOT/trimming compatibility for Microsoft.Data.Sqlite
- Map collections of primitive types to JSON column in relational database
- Translate DateTimeOffset.ToUnixTime(Seconds|Milliseconds)
- Allow pooling DbContext with singleton services
- Optional RestartSequenceOperation.StartValue
- Generate compiled relational model
- Global query filters produce too many parameters
- Optimize update path for single property JSON element
- JSON columns can be used in compiled models
- Unneeded parentheses removed in SQL queries
- Set operations are supported over non-entity projections with different facets
- Json: add support for Sqlite provider
- SQL Server: Support hierarchyid
- Configuration to opt out of occasionally problematic SaveChanges optimizations
- Add convention types for triggers
- Translate element access of a JSON array
- Raw SQL queries for unmapped types
- Support the new BCL DateOnly and TimeOnly structs for SQL Server
- Translate ElementAt(OrDefault)
- Opt-out of lazy-loading for specific navigations
- Lazy-loading for no-tracking queries
- Reverse engineer Synapse and Dynamics 365 TDS
- Set MaxLength on TPH discriminator property by convention
- Translate ToString() on a string column
- Generic overload of ConventionSetBuilder.Remove
- Lookup tracked entities by primary key, alternate key, or foreign key
- Allow UseSequence and HiLo on non-key properties
- Pass query tracking behavior to materialization interceptor
- Use case-insensitive string key comparisons on SQL Server
- Allow value converters to change the DbType
- Resolve application services in EF services
- Numeric rowersion properties automatically convert to binary
- Allow transfer of ownership of DbConnection from application to DbContext
- Provide more information when 'No DbContext was found' error is generated
EF Core 8 contains work from the EF Team at Microsoft (@bricelam @roji @AndriySvyryd @maumar @ajcvickers) as well as contributions from the EF Core community. The community PRs in EF8 are:
- @ErikEJ:
- Update issue templates by ErikEJ · Pull Request #29470 · dotnet/efcore (github.com)
- Reverse engineering of Dynamics CRM TDS endpoint and Synapse Serverless SQL Pool by ErikEJ · Pull Request #29122 · dotnet/efcore (github.com)
- Check for SQL Server VIEW DEFINITION rights fails, if databasename contains special chars by ErikEJ · Pull Request #29612 · dotnet/efcore (github.com)
- Make EngineEdition more readable by ErikEJ · Pull Request #31038 · dotnet/efcore (github.com)
- Fix FK duplicate detection bug by ErikEJ · Pull Request #31181 · dotnet/efcore (github.com)
- Add DateOnly.FromDateTime query mapping for SQL Server by ErikEJ · Pull Request #31180 · dotnet/efcore (github.com)
- @DoctorKrolic:
- Remove unnecessary dependency on MS.CA.VB package by DoctorKrolic · Pull Request #29986 · dotnet/efcore (github.com)
- Refactor internal usage analyzer by DoctorKrolic · Pull Request #30767 · dotnet/efcore (github.com)
- Add analyzer/codefix for usage of interpolated strings in raw query methods by DoctorKrolic · Pull Request #30835 · dotnet/efcore (github.com)
- Refactor analyzers' test infrastructure by DoctorKrolic · Pull Request #30814 · dotnet/efcore (github.com)
- @stevendarby:
- Don't duplicate query filter parameters by stevendarby · Pull Request #29422 · dotnet/efcore (github.com)
- Allow changing an open connection if it's not owned by stevendarby · Pull Request #30706 · dotnet/efcore (github.com)
- Allow DI for pooled DbContexts by stevendarby · Pull Request #30739 · dotnet/efcore (github.com)
- @kuznetsovvj:
- @bikbov:
- @nbarbettini:
- @gurustron:
- @alhad-deshpande:
- @Suchiman:
- @ilmalte:
- @Mihaita:
- @Marusyk:
- @OsamaAbuSitta:
- @NKnusperer:
- @memory-thrasher:
- @beliakov-mb:
- @netotz:
- @justindbaur:
- @matheus-inacio:
- @smnsht:
- @freakingawesome
- @Varorbc:
- @hmajerus:
- @sulton-max:
See GitHub for all issues resolved in 8.0.0.