News

Entity Framework Core 6: What Developers Want

Microsoft outlined its plan for Entity Framework Core 6, which in November will take its place as the data access component of the landmark .NET 6, a long-term support (LTS) release that will mark Microsoft's transition from the Windows-only .NET Framework to an open source, cross-platform umbrella offering of all things .NET.

EF Core 6 is .NET 6's improvement upon Entity Framework 6 (EF6), the company's tried-and-tested object-relational mapper (O/RM) with origins in the .NET Framework that provided early support for .NET Core, the precursor to .NET 5, .NET 6 and so on.

Tricky problems and the pandemic hampered Microsoft's development efforts for .NET 5, which arrived in November, and EF Core specifically, such as a troublesome LINQ implementation.

EF Core NuGet
[Click on image for larger view.] EF Core NuGet (source: Microsoft).

While detailing Microsoft's plans for EF Core 6, Jeremy Likness, senior program manager, .NET Data, .NET, focused on highly requested features, performance, migrations/deployment, feature improvements, bug fixes and more.

In the highly requested feature department, the team is relying upon GitHub issues to prioritize new functionality, of which Likness highlighted the following:

  • SQL Server temporal tables: "Allow temporal tables to be created via Migrations, as well as allowing access to historical data through LINQ queries." This comes from the community in issue #4693, submitted way back in March 2016.

    It says: "Does EF Core support code first approach for Temporal tables? Looking to find a way to use Temporal tables with EF Core code first approach. Please guide me to the article if any existing already."

    According to Microsoft documentation, temporal tables keep data closely related to time context so that stored facts can be interpreted as valid only within a specific period.

    The temporal table issue is the top open issue on the GitHub list when measured by the number of thumbs-up icons πŸ‘, and it ranked No. 3 on the list of most commented issues, with 112 at the time of this writing.

    The most recent comment, from September 2019, reads: "Really long wait for this. I hope this will be prioritized since it is now at the top based on label consider-for-next-release and sort on reaction πŸ‘"

  • JSON columns: "Introduce common patterns for JSON support that can be implemented by any database provider. JSON column support will be implemented for SQL Server and SQLite. (Note that the PostgreSQL and MySQL providers already support JSON columns.)"

    This comes from issue #4021, submitted December 2015 and titled "Map JSON values stored in database to EF properties." The problem, it says, is: "Currently, JSON fields can be mapped to entities in entity framework as string properties and we can parse them using Json.Net library. It would be good if we could map properties in EF model to (JSON text+path)." It garnered 77 comments as of this writing and was No. 2 on the list of thumbs-up reactions.

  • ColumnAttribute.Order: "Allow arbitrary ordering of columns when creating a table with Migrations or EnsureCreated." This comes from issue #10059, submitted October 2017 and titled "Support ColumnAttribute.Order."

    The issue states:

    "#2272 matched the CLR reflection order for columns within a table.

    During design, we decided to wait for more feedback before honoring the value of ColumnAttibute.Order on the properties.

    If the implementation of #2272 is insufficient for you and specifying something like [Column(Order = 1)] would help, please vote for this issue and add details about your scenario (if not already listed) below."

    This issue is No. 7 when ranked by thumbs-up reactions and resulted in 23 comments, with one from September 2020 reading: "Implementing this would also help in adding composite key using data annotations. if ef6 we could use column to denote the order of composite key. Since this is not implemented in ef core we get error 'entity type has composite type defined with data annotations, use fluent api' in ef core. So implement this or add parameter to key to denote order of composite key."

As stated, Likness also detailed plans for performance, migrations, deployments and more.

On the performance front, Likness said EF Core 6 already outperforms EF6 and several initiatives were planned to make it even faster, including:

  • Performance infrastructure and new tests: "Improve the infrastructure for performance tests as well as adding new tests and fixing low-hanging fruit."
  • Compiled models: "Compiled models will improve startup performance, as well as having generally better performance when accessing the model."
  • TechEmpower Fortunes: "We plan to match Dapper performance on the TechEmpower Fortunes benchmark. (This is a significant challenge which will likely not be fully achieved. Nevertheless, we will get as close as we can.)"
  • Linker/AOT: "We will continue investigating in making EF Core work better with linkers and AOT. We do not expect to fully close the gap in the 6.0 timeframe, but we hope to make significant progress."
The .NET Schedule
[Click on image for larger view.] The .NET Schedule (source: Microsoft).

While all of the above and more is planned for EF Core 6 -- including many bug fixes and integration with other .NET data technologies like System.Data and Microsoft.Data.Sqlite -- Microsoft is also planning some experiments and investigations.

"This is a learning process and as such no concrete deliverables are planned for the 6.0 release," said Likness, who pointed to:

  • SqlServer.Core: "An experiment in collaboration with the community to determine what potential there is modern .NET features in a highly performant SQL Server driver."
  • GraphQL: "We plan to investigate the space and collaborate with the community to find ways to improve the experience of using GraphQL with .NET."

More information on all of the above and many more plans are included in Microsoft's Release planning process documentation and the Plan for Entity Framework Core 6.0.

About the Author

David Ramel is an editor and writer at Converge 360.

comments powered by Disqus

Featured

  • Hands On: New VS Code Insiders Build Creates Web Page from Image in Seconds

    New Vision support with GitHub Copilot in the latest Visual Studio Code Insiders build takes a user-supplied mockup image and creates a web page from it in seconds, handling all the HTML and CSS.

  • Naive Bayes Regression Using C#

    Dr. James McCaffrey from Microsoft Research presents a complete end-to-end demonstration of the naive Bayes regression technique, where the goal is to predict a single numeric value. Compared to other machine learning regression techniques, naive Bayes regression is usually less accurate, but is simple, easy to implement and customize, works on both large and small datasets, is highly interpretable, and doesn't require tuning any hyperparameters.

  • VS Code Copilot Previews New GPT-4o AI Code Completion Model

    The 4o upgrade includes additional training on more than 275,000 high-quality public repositories in over 30 popular programming languages, said Microsoft-owned GitHub, which created the original "AI pair programmer" years ago.

  • Microsoft's Rust Embrace Continues with Azure SDK Beta

    "Rust's strong type system and ownership model help prevent common programming errors such as null pointer dereferencing and buffer overflows, leading to more secure and stable code."

  • Xcode IDE from Microsoft Archrival Apple Gets Copilot AI

    Just after expanding the reach of its Copilot AI coding assistant to the open-source Eclipse IDE, Microsoft showcased how it's going even further, providing details about a preview version for the Xcode IDE from archrival Apple.

Subscribe on YouTube

Upcoming Training Events