{"id":28750,"date":"2020-06-25T09:47:30","date_gmt":"2020-06-25T16:47:30","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/dotnet\/?p=28750"},"modified":"2020-06-25T09:47:30","modified_gmt":"2020-06-25T16:47:30","slug":"announcing-entity-framework-core-efcore-5-0-preview-6","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/announcing-entity-framework-core-efcore-5-0-preview-6\/","title":{"rendered":"Announcing Entity Framework Core EFCore 5.0 Preview 6"},"content":{"rendered":"<p>Today, the Entity Framework Core team announces the sixth preview release of <a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore\/5.0.0-preview.6.20312.4\">EF Core 5.0<\/a>. This release includes split queries for related collections, a new &#8220;index&#8221; attribute, improved exceptions related to query translations, IP address mapping, exposing transaction id for correlation, and much more.<\/p>\n<h2 id=\"prerequisites\">Prerequisites<\/h2>\n<p><strong>EF Core 5.0 will <em>not<\/em> run on .NET Standard 2.0 platforms, including .NET Framework.<\/strong><\/p>\n<p>The previews of EF Core 5.0 require <a href=\"https:\/\/github.com\/dotnet\/standard\/blob\/master\/docs\/versions\/netstandard2.1.md\">.NET Standard 2.1<\/a>. This means that EF Core 5.0 will run on .NET Core 3.1 and does <em>not<\/em> require .NET 5. To summarize: EF Core 5.0 runs on <a href=\"https:\/\/docs.microsoft.com\/dotnet\/standard\/net-standard#net-implementation-support\">platforms that support .NET Standard 2.1<\/a>.<\/p>\n<p><strong>The plan is to maintain .NET Standard 2.1 compatibility through the final release.<\/strong><\/p>\n<h2 id=\"be-a-part-of-net-5\">Be a part of .NET 5<\/h2>\n<p>The .NET documentation team is <a href=\"https:\/\/github.com\/dotnet\/docs\/issues\/18923\">reorganizing .NET content<\/a> to better match the workloads you build with .NET. This includes a new <a href=\"https:\/\/github.com\/dotnet\/docs\/issues\/19029\">.NET Data landing page<\/a> that will link out to data-related topics ranging from EF Core to APIs, Big Data, and Machine learning. The planning and execution will be done completely in the open on GitHub. This is your opportunity to help shape the hierarchy and content to best fit your needs as a .NET developer. We look forward to your contributions!<\/p>\n<hr \/>\n<h2 id=\"how-to-get-ef-core-5-0-previews\">How to get EF Core 5.0 previews<\/h2>\n<p>EF Core is distributed exclusively as a set of NuGet packages.\nFor example, to add the SQL Server provider to your project, you can use the following command using the dotnet tool:<\/p>\n<pre><code class=\"lang-bash\"><span class=\"hljs-selector-tag\">dotnet<\/span> <span class=\"hljs-selector-tag\">add<\/span> <span class=\"hljs-selector-tag\">package<\/span> <span class=\"hljs-selector-tag\">Microsoft<\/span><span class=\"hljs-selector-class\">.EntityFrameworkCore<\/span><span class=\"hljs-selector-class\">.SqlServer<\/span> <span class=\"hljs-selector-tag\">--version<\/span> 5<span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.0-preview.6.20312.4<\/span>\r\n<\/code><\/pre>\n<p>This following table links to the preview 6 versions of the EF Core packages and describes what they are used for.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: right;\"><strong>Package<\/strong><\/th>\n<th style=\"text-align: left;\"><strong>Purpose<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: right;\"><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore\/5.0.0-preview.6.20312.4\">Microsoft.EntityFrameworkCore<\/a><\/td>\n<td style=\"text-align: left;\">The main EF Core package that is independent of specific database providers<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: right;\"><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore.SqlServer\/5.0.0-preview.6.20312.4\">Microsoft.EntityFrameworkCore.SqlServer<\/a><\/td>\n<td style=\"text-align: left;\">Database provider for Microsoft SQL Server and SQL Azure<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: right;\"><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite\/5.0.0-preview.6.20312.4\">Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite<\/a><\/td>\n<td style=\"text-align: left;\">SQL Server support for spatial types<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: right;\"><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore.Sqlite\/5.0.0-preview.6.20312.4\">Microsoft.EntityFrameworkCore.Sqlite<\/a><\/td>\n<td style=\"text-align: left;\">Database provider for SQLite that includes the native binary for the database engine<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: right;\"><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore.Sqlite.Core\/5.0.0-preview.6.20312.4\">Microsoft.EntityFrameworkCore.Sqlite.Core<\/a><\/td>\n<td style=\"text-align: left;\">Database provider for SQLite <em>without<\/em> a packaged native binary<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: right;\"><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite\/5.0.0-preview.6.20312.4\">Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite<\/a><\/td>\n<td style=\"text-align: left;\">SQLite support for spatial types<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: right;\"><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore.Cosmos\/5.0.0-preview.6.20312.4\">Microsoft.EntityFrameworkCore.Cosmos<\/a><\/td>\n<td style=\"text-align: left;\">Database provider for Azure Cosmos DB<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: right;\"><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore.InMemory\/5.0.0-preview.6.20312.4\">Microsoft.EntityFrameworkCore.InMemory<\/a><\/td>\n<td style=\"text-align: left;\">The in-memory database provider<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: right;\"><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore.Tools\/5.0.0-preview.6.20312.4\">Microsoft.EntityFrameworkCore.Tools<\/a><\/td>\n<td style=\"text-align: left;\">EF Core PowerShell commands for the Visual Studio Package Manager Console; use this to integrate tools like <a href=\"https:\/\/docs.microsoft.com\/ef\/core\/managing-schemas\/scaffolding\">scaffolding<\/a> and <a href=\"https:\/\/docs.microsoft.com\/ef\/core\/managing-schemas\/migrations\/\">migrations<\/a> with Visual Studio<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: right;\"><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore.Design\/5.0.0-preview.6.20312.4\">Microsoft.EntityFrameworkCore.Design<\/a><\/td>\n<td style=\"text-align: left;\">Shared design-time components for EF Core tools<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: right;\"><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore.Proxies\/5.0.0-preview.6.20312.4\">Microsoft.EntityFrameworkCore.Proxies<\/a><\/td>\n<td style=\"text-align: left;\">Lazy-loading and change-tracking proxies<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: right;\"><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore.Abstractions\/5.0.0-preview.6.20312.4\">Microsoft.EntityFrameworkCore.Abstractions<\/a><\/td>\n<td style=\"text-align: left;\">Decoupled EF Core abstractions; use this for features like extended data annotations defined by EF Core<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: right;\"><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore.Relational\/5.0.0-preview.6.20312.4\">Microsoft.EntityFrameworkCore.Relational<\/a><\/td>\n<td style=\"text-align: left;\">Shared EF Core components for relational database providers<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: right;\"><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore.Analyzers\/5.0.0-preview.6.20312.4\">Microsoft.EntityFrameworkCore.Analyzers<\/a><\/td>\n<td style=\"text-align: left;\">C# analyzers for EF Core<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>We also published the 5.0 preview 6 release of the <a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.Data.Sqlite.Core\/5.0.0-preview.6.20312.4\">Microsoft.Data.Sqlite.Core<\/a> provider for <a href=\"https:\/\/docs.microsoft.com\/dotnet\/framework\/data\/adonet\/ado-net-overview\">ADO.NET<\/a>.<\/p>\n<h2 id=\"installing-the-ef-core-command-line-interface-cli-\">Installing the EF Core Command Line Interface (CLI)<\/h2>\n<p>As with EF Core 3.0 and 3.1, the EF Core CLI is no longer included in the .NET Core SDK. Before you can execute EF Core migration or scaffolding commands, you&#8217;ll have to install this package as either a global or local tool.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/06\/dotnet-ef.jpg\" alt=\"dotnet-ef\" \/><\/p>\n<p>To install the preview tool globally, first uninstall any existing version with:<\/p>\n<pre><code class=\"lang-bash\">dotnet tool <span class=\"hljs-keyword\">uninstall<\/span> <span class=\"hljs-comment\">--global dotnet-ef<\/span>\r\n<\/code><\/pre>\n<p>Then install with:<\/p>\n<pre><code class=\"lang-bash\"><span class=\"hljs-comment\">dotnet<\/span> <span class=\"hljs-comment\">tool<\/span> <span class=\"hljs-comment\">install<\/span> <span class=\"hljs-literal\">-<\/span><span class=\"hljs-literal\">-<\/span><span class=\"hljs-comment\">global<\/span> <span class=\"hljs-comment\">dotnet<\/span><span class=\"hljs-literal\">-<\/span><span class=\"hljs-comment\">ef<\/span> <span class=\"hljs-literal\">-<\/span><span class=\"hljs-literal\">-<\/span><span class=\"hljs-comment\">version<\/span> <span class=\"hljs-comment\">5<\/span><span class=\"hljs-string\">.<\/span><span class=\"hljs-comment\">0<\/span><span class=\"hljs-string\">.<\/span><span class=\"hljs-comment\">0<\/span><span class=\"hljs-literal\">-<\/span><span class=\"hljs-comment\">preview.6.20312.4<\/span>\r\n<\/code><\/pre>\n<p>It&#8217;s possible to use this new version of the EF Core CLI with projects that use older versions of the EF Core runtime.<\/p>\n<hr \/>\n<h2 id=\"what-s-new-in-ef-core-5-preview-6\">What&#8217;s New in EF Core 5 Preview 6<\/h2>\n<p>We maintain documentation covering <a href=\"https:\/\/docs.microsoft.com\/ef\/core\/what-is-new\/ef-core-5.0\/whatsnew\">new features introduced into each preview<\/a>.<\/p>\n<p>Some of the highlights from preview 6 are called out below. This preview also includes several bug fixes.<\/p>\n<h3 id=\"split-queries-for-related-collections\">Split queries for related collections<\/h3>\n<p>Starting with EF Core 3.0, EF Core always generates a single SQL query for each LINQ query. This ensures consistency of the data returned within the constraints of the transaction mode in use. However, this can become very slow when the query uses <code>Include<\/code> or a projection to bring back multiple related collections.<\/p>\n<p>EF Core 5.0 now allows a single LINQ query including related collections to be split into multiple SQL queries. This can significantly improve performance, but can result in inconsistency in the results returned if the data changes between the two queries. Transactions can be used to mitigate this, at least within the constraints of the transaction mode in use.<\/p>\n<h4 id=\"split-queries-with-include\">Split queries with Include<\/h4>\n<p>For example, consider a query that pulls in two levels of related collections using <code>Include<\/code>:<\/p>\n<pre><code class=\"lang-CSharp\"><span class=\"hljs-keyword\">var<\/span> artists = context.Artists\r\n    .Include(<span class=\"hljs-function\"><span class=\"hljs-params\">e<\/span> =&gt;<\/span> e.Albums).ThenInclude(<span class=\"hljs-function\"><span class=\"hljs-params\">e<\/span> =&gt;<\/span> e.Tags)\r\n    .ToList();\r\n<\/code><\/pre>\n<p>By default, EF Core will generate the following SQL when using the SQLite provider:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">SELECT<\/span> <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>, <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Name\"<\/span>, <span class=\"hljs-string\">\"t0\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>, <span class=\"hljs-string\">\"t0\"<\/span>.<span class=\"hljs-string\">\"ArtistId\"<\/span>, <span class=\"hljs-string\">\"t0\"<\/span>.<span class=\"hljs-string\">\"Title\"<\/span>, <span class=\"hljs-string\">\"t0\"<\/span>.<span class=\"hljs-string\">\"Id0\"<\/span>, <span class=\"hljs-string\">\"t0\"<\/span>.<span class=\"hljs-string\">\"AlbumId\"<\/span>, <span class=\"hljs-string\">\"t0\"<\/span>.<span class=\"hljs-string\">\"Name\"<\/span>\r\n<span class=\"hljs-keyword\">FROM<\/span> <span class=\"hljs-string\">\"Artists\"<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-string\">\"a\"<\/span>\r\n<span class=\"hljs-keyword\">LEFT<\/span> <span class=\"hljs-keyword\">JOIN<\/span> (\r\n    <span class=\"hljs-keyword\">SELECT<\/span> <span class=\"hljs-string\">\"a0\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>, <span class=\"hljs-string\">\"a0\"<\/span>.<span class=\"hljs-string\">\"ArtistId\"<\/span>, <span class=\"hljs-string\">\"a0\"<\/span>.<span class=\"hljs-string\">\"Title\"<\/span>, <span class=\"hljs-string\">\"t\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-string\">\"Id0\"<\/span>, <span class=\"hljs-string\">\"t\"<\/span>.<span class=\"hljs-string\">\"AlbumId\"<\/span>, <span class=\"hljs-string\">\"t\"<\/span>.<span class=\"hljs-string\">\"Name\"<\/span>\r\n    <span class=\"hljs-keyword\">FROM<\/span> <span class=\"hljs-string\">\"Album\"<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-string\">\"a0\"<\/span>\r\n    <span class=\"hljs-keyword\">LEFT<\/span> <span class=\"hljs-keyword\">JOIN<\/span> <span class=\"hljs-string\">\"Tag\"<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-string\">\"t\"<\/span> <span class=\"hljs-keyword\">ON<\/span> <span class=\"hljs-string\">\"a0\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span> = <span class=\"hljs-string\">\"t\"<\/span>.<span class=\"hljs-string\">\"AlbumId\"<\/span>\r\n) <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-string\">\"t0\"<\/span> <span class=\"hljs-keyword\">ON<\/span> <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span> = <span class=\"hljs-string\">\"t0\"<\/span>.<span class=\"hljs-string\">\"ArtistId\"<\/span>\r\n<span class=\"hljs-keyword\">ORDER<\/span> <span class=\"hljs-keyword\">BY<\/span> <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>, <span class=\"hljs-string\">\"t0\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>, <span class=\"hljs-string\">\"t0\"<\/span>.<span class=\"hljs-string\">\"Id0\"<\/span>\r\n<\/code><\/pre>\n<p>The new <code>AsSplitQuery<\/code> API can be used to change this behavior. For example:<\/p>\n<pre><code class=\"lang-CSharp\"><span class=\"hljs-keyword\">var<\/span> artists = context.Artists\r\n    .AsSplitQuery()\r\n    .Include(<span class=\"hljs-function\"><span class=\"hljs-params\">e<\/span> =&gt;<\/span> e.Albums).ThenInclude(<span class=\"hljs-function\"><span class=\"hljs-params\">e<\/span> =&gt;<\/span> e.Tags)\r\n    .ToList();\r\n<\/code><\/pre>\n<p>AsSplitQuery is available for all relational database providers and can be used anywhere in the query, just like AsNoTracking. EF Core will now generate the following three SQL queries:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">SELECT<\/span> <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>, <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Name\"<\/span>\r\n<span class=\"hljs-keyword\">FROM<\/span> <span class=\"hljs-string\">\"Artists\"<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-string\">\"a\"<\/span>\r\n<span class=\"hljs-keyword\">ORDER<\/span> <span class=\"hljs-keyword\">BY<\/span> <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>\r\n\r\n<span class=\"hljs-keyword\">SELECT<\/span> <span class=\"hljs-string\">\"a0\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>, <span class=\"hljs-string\">\"a0\"<\/span>.<span class=\"hljs-string\">\"ArtistId\"<\/span>, <span class=\"hljs-string\">\"a0\"<\/span>.<span class=\"hljs-string\">\"Title\"<\/span>, <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>\r\n<span class=\"hljs-keyword\">FROM<\/span> <span class=\"hljs-string\">\"Artists\"<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-string\">\"a\"<\/span>\r\n<span class=\"hljs-keyword\">INNER<\/span> <span class=\"hljs-keyword\">JOIN<\/span> <span class=\"hljs-string\">\"Album\"<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-string\">\"a0\"<\/span> <span class=\"hljs-keyword\">ON<\/span> <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span> = <span class=\"hljs-string\">\"a0\"<\/span>.<span class=\"hljs-string\">\"ArtistId\"<\/span>\r\n<span class=\"hljs-keyword\">ORDER<\/span> <span class=\"hljs-keyword\">BY<\/span> <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>, <span class=\"hljs-string\">\"a0\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>\r\n\r\n<span class=\"hljs-keyword\">SELECT<\/span> <span class=\"hljs-string\">\"t\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>, <span class=\"hljs-string\">\"t\"<\/span>.<span class=\"hljs-string\">\"AlbumId\"<\/span>, <span class=\"hljs-string\">\"t\"<\/span>.<span class=\"hljs-string\">\"Name\"<\/span>, <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>, <span class=\"hljs-string\">\"a0\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>\r\n<span class=\"hljs-keyword\">FROM<\/span> <span class=\"hljs-string\">\"Artists\"<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-string\">\"a\"<\/span>\r\n<span class=\"hljs-keyword\">INNER<\/span> <span class=\"hljs-keyword\">JOIN<\/span> <span class=\"hljs-string\">\"Album\"<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-string\">\"a0\"<\/span> <span class=\"hljs-keyword\">ON<\/span> <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span> = <span class=\"hljs-string\">\"a0\"<\/span>.<span class=\"hljs-string\">\"ArtistId\"<\/span>\r\n<span class=\"hljs-keyword\">INNER<\/span> <span class=\"hljs-keyword\">JOIN<\/span> <span class=\"hljs-string\">\"Tag\"<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-string\">\"t\"<\/span> <span class=\"hljs-keyword\">ON<\/span> <span class=\"hljs-string\">\"a0\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span> = <span class=\"hljs-string\">\"t\"<\/span>.<span class=\"hljs-string\">\"AlbumId\"<\/span>\r\n<span class=\"hljs-keyword\">ORDER<\/span> <span class=\"hljs-keyword\">BY<\/span> <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>, <span class=\"hljs-string\">\"a0\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>\r\n<\/code><\/pre>\n<p>All operations on the query root are supported. This includes OrderBy\/Skip\/Take, Join operations, FirstOrDefault and similar single result selecting operations.<\/p>\n<p>Note that filtered Includes with OrderBy\/Skip\/Take are not supported in preview 6, but are available in the daily builds and will be included in preview 7.<\/p>\n<h4 id=\"split-queries-with-collection-projections\">Split queries with collection projections<\/h4>\n<p><code>AsSplitQuery<\/code> can also be used when collections are loaded in projections. For example:<\/p>\n<pre><code class=\"lang-CSharp\">context.Artists\r\n    .AsSplitQuery()\r\n    .Select(<span class=\"hljs-function\"><span class=\"hljs-params\">e<\/span> =&gt;<\/span> <span class=\"hljs-keyword\">new<\/span>\r\n    {\r\n        Artist = e,\r\n        Albums = e.Albums,\r\n    }).ToList();\r\n<\/code><\/pre>\n<p>This LINQ query generates the following two SQL queries when using the SQLite provider:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">SELECT<\/span> <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>, <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Name\"<\/span>\r\n<span class=\"hljs-keyword\">FROM<\/span> <span class=\"hljs-string\">\"Artists\"<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-string\">\"a\"<\/span>\r\n<span class=\"hljs-keyword\">ORDER<\/span> <span class=\"hljs-keyword\">BY<\/span> <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>\r\n\r\n<span class=\"hljs-keyword\">SELECT<\/span> <span class=\"hljs-string\">\"a0\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>, <span class=\"hljs-string\">\"a0\"<\/span>.<span class=\"hljs-string\">\"ArtistId\"<\/span>, <span class=\"hljs-string\">\"a0\"<\/span>.<span class=\"hljs-string\">\"Title\"<\/span>, <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>\r\n<span class=\"hljs-keyword\">FROM<\/span> <span class=\"hljs-string\">\"Artists\"<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-string\">\"a\"<\/span>\r\n<span class=\"hljs-keyword\">INNER<\/span> <span class=\"hljs-keyword\">JOIN<\/span> <span class=\"hljs-string\">\"Album\"<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-string\">\"a0\"<\/span> <span class=\"hljs-keyword\">ON<\/span> <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span> = <span class=\"hljs-string\">\"a0\"<\/span>.<span class=\"hljs-string\">\"ArtistId\"<\/span>\r\n<span class=\"hljs-keyword\">ORDER<\/span> <span class=\"hljs-keyword\">BY<\/span> <span class=\"hljs-string\">\"a\"<\/span>.<span class=\"hljs-string\">\"Id\"<\/span>\r\n<\/code><\/pre>\n<p>Note that only materialization of the collection is supported. Any composition after <code>e.Albums<\/code> in above case won&#8217;t result in a split query. Improvements in this area are tracked by <a href=\"https:\/\/github.com\/dotnet\/efcore\/issues\/21234\">#21234<\/a>.<\/p>\n<h3 id=\"indexattribute\">IndexAttribute<\/h3>\n<p>The new IndexAttribute can be placed on an entity type to specify an index for a single column. For example:<\/p>\n<pre><code class=\"lang-CSharp\">[Index(<span class=\"hljs-keyword\">nameof<\/span>(FullName), IsUnique = <span class=\"hljs-literal\">true<\/span>)]\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">User<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> Id { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n\r\n    [MaxLength(<span class=\"hljs-number\">128<\/span>)]\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> FullName { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n<\/code><\/pre>\n<p>For SQL Server, Migrations will then generate the following SQL:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">CREATE<\/span> <span class=\"hljs-keyword\">UNIQUE<\/span> <span class=\"hljs-keyword\">INDEX<\/span> [IX_Users_FullName]\r\n    <span class=\"hljs-keyword\">ON<\/span> [<span class=\"hljs-keyword\">Users<\/span>] ([FullName])\r\n    <span class=\"hljs-keyword\">WHERE<\/span> [FullName] <span class=\"hljs-keyword\">IS<\/span> <span class=\"hljs-keyword\">NOT<\/span> <span class=\"hljs-literal\">NULL<\/span>;\r\n<\/code><\/pre>\n<p>IndexAttribute can also be used to specify an index spanning multiple columns. For example:<\/p>\n<pre><code class=\"lang-CSharp\">[Index(<span class=\"hljs-keyword\">nameof<\/span>(FirstName), <span class=\"hljs-keyword\">nameof<\/span>(LastName), IsUnique = <span class=\"hljs-literal\">true<\/span>)]\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">User<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> Id { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n\r\n    [MaxLength(<span class=\"hljs-number\">64<\/span>)]\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> FirstName { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n\r\n    [MaxLength(<span class=\"hljs-number\">64<\/span>)]\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> LastName { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n<\/code><\/pre>\n<p>For SQL Server, this results in:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">CREATE<\/span> <span class=\"hljs-keyword\">UNIQUE<\/span> <span class=\"hljs-keyword\">INDEX<\/span> [IX_Users_FirstName_LastName]\r\n    <span class=\"hljs-keyword\">ON<\/span> [<span class=\"hljs-keyword\">Users<\/span>] ([FirstName], [LastName])\r\n    <span class=\"hljs-keyword\">WHERE<\/span> [FirstName] <span class=\"hljs-keyword\">IS<\/span> <span class=\"hljs-keyword\">NOT<\/span> <span class=\"hljs-literal\">NULL<\/span> <span class=\"hljs-keyword\">AND<\/span> [LastName] <span class=\"hljs-keyword\">IS<\/span> <span class=\"hljs-keyword\">NOT<\/span> <span class=\"hljs-literal\">NULL<\/span>;\r\n<\/code><\/pre>\n<p>Documentation is tracked by issue <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/issues\/2407\">#2407<\/a>.<\/p>\n<h3 id=\"improved-query-translation-exceptions\">Improved query translation exceptions<\/h3>\n<p>We are continuing to improve the exception messages generated when query translation fails. For example, this query uses the unmapped property <code>IsSigned<\/code>:<\/p>\n<pre><code class=\"lang-CSharp\"><span class=\"hljs-keyword\">var<\/span> artists = context.Artists.Where(<span class=\"hljs-function\"><span class=\"hljs-params\">e<\/span> =&gt;<\/span> e.IsSigned).ToList();\r\n<\/code><\/pre>\n<p>EF Core will throw the following exception indicating that translation failed because <code>IsSigned<\/code> is not mapped:<\/p>\n<blockquote><p>Unhandled exception. System.InvalidOperationException: The LINQ expression &#8216;DbSet()\n.Where(a =&gt; a.IsSigned)&#8217; could not be translated. Additional information: Translation of member &#8216;IsSigned&#8217; on entity type &#8216;Artist&#8217; failed. Possibly the specified member is not mapped. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See <a href=\"https:\/\/go.microsoft.com\/fwlink\/?linkid=2101038\">https:\/\/go.microsoft.com\/fwlink\/?linkid=2101038<\/a> for more information.<\/p><\/blockquote>\n<p>Similarly, better exception messages are now generated when attempting to translate string comparisons with culture-dependent semantics. For example, this query attempts to use <code>StringComparison.CurrentCulture<\/code>:<\/p>\n<pre><code class=\"lang-CSharp\"><span class=\"hljs-keyword\">var<\/span> artists = context.Artists\r\n    .Where(<span class=\"hljs-function\"><span class=\"hljs-params\">e<\/span> =&gt;<\/span> e.Name.Equals(<span class=\"hljs-string\">\"The Unicorns\"<\/span>, StringComparison.CurrentCulture))\r\n    .ToList();\r\n<\/code><\/pre>\n<p>EF Core will now throw the following exception:<\/p>\n<blockquote><p>Unhandled exception. System.InvalidOperationException: The LINQ expression &#8216;DbSet()\n.Where(a =&gt; a.Name.Equals(\nvalue: &#8220;The Unicorns&#8221;,\ncomparisonType: CurrentCulture))&#8217; could not be translated. Additional information: Translation of &#8216;string.Equals&#8217; method which takes &#8216;StringComparison&#8217; argument is not supported. See <a href=\"https:\/\/go.microsoft.com\/fwlink\/?linkid=2129535\">https:\/\/go.microsoft.com\/fwlink\/?linkid=2129535<\/a> for more information. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See <a href=\"https:\/\/go.microsoft.com\/fwlink\/?linkid=2101038\">https:\/\/go.microsoft.com\/fwlink\/?linkid=2101038<\/a> for more information.<\/p><\/blockquote>\n<h3 id=\"specify-transaction-id\">Specify transaction ID<\/h3>\n<p>This feature was contributed from the community by <a href=\"https:\/\/github.com\/Marusyk\">@Marusyk<\/a>. Many thanks for the contribution!<\/p>\n<p>EF Core exposes a transaction ID for correlation of transactions across calls. This is typically set by EF Core when a transaction is started. If the application starts the transaction instead, then this feature allows the application to explicitly set the transaction ID so it is correlated correctly everywhere it is used. For example:<\/p>\n<pre><code class=\"lang-CSharp\">using (context<span class=\"hljs-selector-class\">.Database<\/span><span class=\"hljs-selector-class\">.UseTransaction<\/span>(myTransaction, myId))\r\n{\r\n   ...\r\n}\r\n<\/code><\/pre>\n<h3 id=\"ipaddress-mapping\">IPAddress mapping<\/h3>\n<p>This feature was contributed from the community by <a href=\"https:\/\/github.com\/ralmsdeveloper\">@ralmsdeveloper<\/a>. Many thanks for the contribution!<\/p>\n<p>The standard .NET <a href=\"https:\/\/docs.microsoft.com\/dotnet\/api\/system.net.ipaddress\">IPAddress class<\/a> is now automatically mapped to a string column for databases that do not already have native support. For example, consider mapping this entity type:<\/p>\n<pre><code class=\"lang-CSharp\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Host<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> Id { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    <span class=\"hljs-keyword\">public<\/span> IPAddress Address { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n<\/code><\/pre>\n<p>On SQL Server, this will result in Migrations creating the following table:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">CREATE<\/span> <span class=\"hljs-keyword\">TABLE<\/span> [Host] (\r\n    [<span class=\"hljs-keyword\">Id<\/span>] <span class=\"hljs-built_in\">int<\/span> <span class=\"hljs-keyword\">NOT<\/span> <span class=\"hljs-literal\">NULL<\/span>,\r\n    [Address] <span class=\"hljs-keyword\">nvarchar<\/span>(<span class=\"hljs-number\">45<\/span>) <span class=\"hljs-literal\">NULL<\/span>,\r\n    <span class=\"hljs-keyword\">CONSTRAINT<\/span> [PK_Host] PRIMARY <span class=\"hljs-keyword\">KEY<\/span> ([<span class=\"hljs-keyword\">Id<\/span>]));\r\n<\/code><\/pre>\n<p>Entities can then be added in the normal way:<\/p>\n<pre><code class=\"lang-CSharp\"><span class=\"hljs-built_in\">context<\/span>.<span class=\"hljs-keyword\">AddRange(\r\n<\/span>    new Host { <span class=\"hljs-keyword\">Address <\/span>= IPAddress.Parse(<span class=\"hljs-string\">\"127.0.0.1\"<\/span>)},\r\n    new Host { <span class=\"hljs-keyword\">Address <\/span>= IPAddress.Parse(<span class=\"hljs-string\">\"0000:0000:0000:0000:0000:0000:0000:0001\"<\/span>)})<span class=\"hljs-comment\">;<\/span>\r\n<\/code><\/pre>\n<p>And the resulting SQL will insert the normalized IPv4 or IPv6 address:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-attribute\">Executed<\/span> DbCommand (<span class=\"hljs-number\">14ms<\/span>) [Parameters=[<span class=\"hljs-variable\">@p0<\/span>=<span class=\"hljs-string\">'1'<\/span>, <span class=\"hljs-variable\">@p1<\/span>=<span class=\"hljs-string\">'127.0.0.1'<\/span> (Size = <span class=\"hljs-number\">45<\/span>), <span class=\"hljs-variable\">@p2<\/span>=<span class=\"hljs-string\">'2'<\/span>, <span class=\"hljs-variable\">@p3<\/span>=<span class=\"hljs-string\">'::1'<\/span> (Size = <span class=\"hljs-number\">45<\/span>)], CommandType=<span class=\"hljs-string\">'Text'<\/span>, CommandTimeout=<span class=\"hljs-string\">'30'<\/span>]\r\n      SET NOCOUNT ON;\r\n      <span class=\"hljs-attribute\">INSERT<\/span> INTO [Host] ([Id], [Address])\r\n      VALUES (<span class=\"hljs-variable\">@p0<\/span>, <span class=\"hljs-variable\">@p1<\/span>), (<span class=\"hljs-variable\">@p2<\/span>, <span class=\"hljs-variable\">@p3<\/span>);\r\n<\/code><\/pre>\n<h3 id=\"exclude-onconfiguring-when-scaffolding\">Exclude OnConfiguring when scaffolding<\/h3>\n<p>When a DbContext is scaffolded from an existing database, EF Core by default creates an OnConfiguring overload with a connection string so that the context is immediately usable. However, this is not useful if you already have a partial class with OnConfiguring, or if you are configuring the context some other way.<\/p>\n<p>To address this, the scaffolding commands can now be instructed to ommit generation of OnConfiguring. For example:<\/p>\n<pre><code>dotnet ef dbcontext scaffold <span class=\"hljs-string\">\"Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=Chinook\"<\/span> Microsoft<span class=\"hljs-selector-class\">.EntityFrameworkCore<\/span><span class=\"hljs-selector-class\">.SqlServer<\/span> --no-onconfiguring\r\n<\/code><\/pre>\n<p>Or in the Package Manager Console:<\/p>\n<pre><code>Scaffold-DbContext <span class=\"hljs-string\">'Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=Chinook'<\/span> Microsoft<span class=\"hljs-selector-class\">.EntityFrameworkCore<\/span><span class=\"hljs-selector-class\">.SqlServer<\/span> -NoOnConfiguring\r\n<\/code><\/pre>\n<p>Note that we recommend using <a href=\"https:\/\/docs.microsoft.com\/ef\/core\/managing-schemas\/scaffolding?tabs=vs#configuration-and-user-secrets\">a named connection string and secure storage like User Secrets<\/a>.<\/p>\n<h3 id=\"translations-for-firstordefault-on-strings\">Translations for FirstOrDefault on strings<\/h3>\n<p>This feature was contributed from the community by <a href=\"https:\/\/github.com\/dvoreckyaa\">@dvoreckyaa<\/a>. Many thanks for the contribution!<\/p>\n<p>FirstOrDefault and similar operators for characters in strings are now translated. For example, this LINQ query:<\/p>\n<pre><code class=\"lang-CSharp\">context.Customers.Where(<span class=\"hljs-function\"><span class=\"hljs-params\">c<\/span> =&gt;<\/span> c.ContactName.FirstOrDefault() == <span class=\"hljs-string\">'A'<\/span>).ToList();\r\n<\/code><\/pre>\n<p>Will be translated to the following SQL when using SQL Server:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-symbol\">SELECT<\/span> [c].[<span class=\"hljs-symbol\">Id<\/span>], [c].[<span class=\"hljs-symbol\">ContactName<\/span>]\r\n<span class=\"hljs-symbol\">FROM<\/span> [<span class=\"hljs-symbol\">Customer<\/span>] <span class=\"hljs-symbol\">AS<\/span> [c]\r\n<span class=\"hljs-symbol\">WHERE<\/span> <span class=\"hljs-symbol\">SUBSTRING<\/span>([c].[<span class=\"hljs-symbol\">ContactName<\/span>], <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">1<\/span>) = <span class=\"hljs-symbol\">N<\/span><span class=\"hljs-string\">'A'<\/span>\r\n<\/code><\/pre>\n<h3 id=\"simplify-case-blocks\">Simplify case blocks<\/h3>\n<p>EF Core now generates better queries with CASE blocks. For example, this LINQ query:<\/p>\n<pre><code class=\"lang-CSharp\">context<span class=\"hljs-selector-class\">.Weapons<\/span>\r\n    .OrderBy(w =&gt; w<span class=\"hljs-selector-class\">.Name<\/span><span class=\"hljs-selector-class\">.CompareTo<\/span>(<span class=\"hljs-string\">\"Marcus' Lancer\"<\/span>) == <span class=\"hljs-number\">0<\/span>)\r\n    .ThenBy(w =&gt; w.Id)\r\n<\/code><\/pre>\n<p>Was on SQL Server formally translated to:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">SELECT<\/span> [w].[<span class=\"hljs-keyword\">Id<\/span>], [w].[AmmunitionType], [w].[IsAutomatic], [w].[<span class=\"hljs-keyword\">Name<\/span>], [w].[OwnerFullName], [w].[SynergyWithId]\r\n<span class=\"hljs-keyword\">FROM<\/span> [Weapons] <span class=\"hljs-keyword\">AS<\/span> [w]\r\n<span class=\"hljs-keyword\">ORDER<\/span> <span class=\"hljs-keyword\">BY<\/span> <span class=\"hljs-keyword\">CASE<\/span>\r\n    <span class=\"hljs-keyword\">WHEN<\/span> (<span class=\"hljs-keyword\">CASE<\/span>\r\n        <span class=\"hljs-keyword\">WHEN<\/span> [w].[<span class=\"hljs-keyword\">Name<\/span>] = N<span class=\"hljs-string\">'Marcus'' Lancer'<\/span> <span class=\"hljs-keyword\">THEN<\/span> <span class=\"hljs-number\">0<\/span>\r\n        <span class=\"hljs-keyword\">WHEN<\/span> [w].[<span class=\"hljs-keyword\">Name<\/span>] &gt; N<span class=\"hljs-string\">'Marcus'' Lancer'<\/span> <span class=\"hljs-keyword\">THEN<\/span> <span class=\"hljs-number\">1<\/span>\r\n        <span class=\"hljs-keyword\">WHEN<\/span> [w].[<span class=\"hljs-keyword\">Name<\/span>] &lt; N<span class=\"hljs-string\">'Marcus'' Lancer'<\/span> <span class=\"hljs-keyword\">THEN<\/span> <span class=\"hljs-number\">-1<\/span>\r\n    <span class=\"hljs-keyword\">END<\/span> = <span class=\"hljs-number\">0<\/span>) <span class=\"hljs-keyword\">AND<\/span> <span class=\"hljs-keyword\">CASE<\/span>\r\n        <span class=\"hljs-keyword\">WHEN<\/span> [w].[<span class=\"hljs-keyword\">Name<\/span>] = N<span class=\"hljs-string\">'Marcus'' Lancer'<\/span> <span class=\"hljs-keyword\">THEN<\/span> <span class=\"hljs-number\">0<\/span>\r\n        <span class=\"hljs-keyword\">WHEN<\/span> [w].[<span class=\"hljs-keyword\">Name<\/span>] &gt; N<span class=\"hljs-string\">'Marcus'' Lancer'<\/span> <span class=\"hljs-keyword\">THEN<\/span> <span class=\"hljs-number\">1<\/span>\r\n        <span class=\"hljs-keyword\">WHEN<\/span> [w].[<span class=\"hljs-keyword\">Name<\/span>] &lt; N<span class=\"hljs-string\">'Marcus'' Lancer'<\/span> <span class=\"hljs-keyword\">THEN<\/span> <span class=\"hljs-number\">-1<\/span>\r\n    <span class=\"hljs-keyword\">END<\/span> <span class=\"hljs-keyword\">IS<\/span> <span class=\"hljs-keyword\">NOT<\/span> <span class=\"hljs-literal\">NULL<\/span> <span class=\"hljs-keyword\">THEN<\/span> <span class=\"hljs-keyword\">CAST<\/span>(<span class=\"hljs-number\">1<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-built_in\">bit<\/span>)\r\n    <span class=\"hljs-keyword\">ELSE<\/span> <span class=\"hljs-keyword\">CAST<\/span>(<span class=\"hljs-number\">0<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-built_in\">bit<\/span>)\r\n<span class=\"hljs-keyword\">END<\/span>, [w].[<span class=\"hljs-keyword\">Id<\/span>]<span class=\"hljs-string\">\");<\/span>\r\n<\/code><\/pre>\n<p>But is now translated to:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">SELECT<\/span> [w].[<span class=\"hljs-keyword\">Id<\/span>], [w].[AmmunitionType], [w].[IsAutomatic], [w].[<span class=\"hljs-keyword\">Name<\/span>], [w].[OwnerFullName], [w].[SynergyWithId]\r\n<span class=\"hljs-keyword\">FROM<\/span> [Weapons] <span class=\"hljs-keyword\">AS<\/span> [w]\r\n<span class=\"hljs-keyword\">ORDER<\/span> <span class=\"hljs-keyword\">BY<\/span> <span class=\"hljs-keyword\">CASE<\/span>\r\n    <span class=\"hljs-keyword\">WHEN<\/span> ([w].[<span class=\"hljs-keyword\">Name<\/span>] = N<span class=\"hljs-string\">'Marcus'' Lancer'<\/span>) <span class=\"hljs-keyword\">AND<\/span> [w].[<span class=\"hljs-keyword\">Name<\/span>] <span class=\"hljs-keyword\">IS<\/span> <span class=\"hljs-keyword\">NOT<\/span> <span class=\"hljs-literal\">NULL<\/span> <span class=\"hljs-keyword\">THEN<\/span> <span class=\"hljs-keyword\">CAST<\/span>(<span class=\"hljs-number\">1<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-built_in\">bit<\/span>)\r\n    <span class=\"hljs-keyword\">ELSE<\/span> <span class=\"hljs-keyword\">CAST<\/span>(<span class=\"hljs-number\">0<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-built_in\">bit<\/span>)\r\n<span class=\"hljs-keyword\">END<\/span>, [w].[<span class=\"hljs-keyword\">Id<\/span>]<span class=\"hljs-string\">\");<\/span>\r\n<\/code><\/pre>\n<hr \/>\n<h2 id=\"daily-builds\">Daily builds<\/h2>\n<p>EF Core previews are aligned with .NET 5 previews. These previews tend to lag behind the latest work on EF Core. Consider using the <a href=\"https:\/\/github.com\/aspnet\/AspNetCore\/blob\/master\/docs\/DailyBuilds.md\">daily builds<\/a> instead to get the most up-to-date EF Core features and bug fixes.<\/p>\n<p>As with the previews, the daily builds do not require .NET 5; they can be used with GA\/RTM release of .NET Core 3.1.<\/p>\n<hr \/>\n<h2 id=\"the-ef-core-community-standup\">The EF Core Community Standup<\/h2>\n<p>The EF Core team is now live streaming every other Wednesday at 10am Pacific Time, 1pm Eastern Time, or 17:00 UTC. Join the stream to ask questions about the EF Core topic of your choice, including the latest preview release.<\/p>\n<ul>\n<li><a href=\"https:\/\/dotnet.microsoft.com\/platform\/community\/standup\">Visit the .NET Community Standup<\/a> page to preview upcoming shows and view recordings from past shows<\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/efcore\/discussions\/21371\">Suggest a guest or project, including your own<\/a> by posting to the linked discussion<\/li>\n<li>You can also <a href=\"https:\/\/github.com\/dotnet\/efcore\/discussions\/21192\">request an EF Core demo<\/a><\/li>\n<\/ul>\n<h2 id=\"documentation-and-feedback\">Documentation and feedback<\/h2>\n<p>The starting point for all EF Core documentation is <a href=\"https:\/\/docs.microsoft.com\/ef\/\">docs.microsoft.com\/ef\/<\/a>.<\/p>\n<p>Please file issues found and any other feedback on the <a href=\"https:\/\/github.com\/dotnet\/efcore\">dotnet\/efcore GitHub repo<\/a>.<\/p>\n<hr \/>\n<h2 id=\"helpful-short-links\">Helpful Short Links<\/h2>\n<p>The following short links are provided for easy reference and access.<\/p>\n<p>Main documentation:\n<a href=\"https:\/\/aka.ms\/efdocs\">https:\/\/aka.ms\/efdocs<\/a><\/p>\n<p>Issues and feature requests for EF Core:\n<a href=\"https:\/\/aka.ms\/efcorefeedback\">https:\/\/aka.ms\/efcorefeedback<\/a><\/p>\n<p>Entity Framework Roadmap:\n<a href=\"https:\/\/aka.ms\/efroadmap\">https:\/\/aka.ms\/efroadmap<\/a><\/p>\n<p>What&#8217;s new in EF Core 5.x?\n<a href=\"https:\/\/aka.ms\/efcore5\">https:\/\/aka.ms\/efcore5<\/a><\/p>\n<hr \/>\n<h2 id=\"thank-you-from-the-team\">Thank you from the team<\/h2>\n<p>A big thank you from the EF team to everyone who has used EF over the years!<\/p>\n<table>\n<tbody>\n<tr>\n<td><a href=\"https:\/\/github.com\/ajcvickers\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/efteam_ajcvickers.jpeg\" alt=\"ajcvickers\" width=\"200px\" \/>\nArthur Vickers<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/AndriySvyryd\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/efteam_AndriySvyryd.jpeg\" alt=\"AndriySvyryd\" width=\"200px\" \/>\nAndriy Svyryd<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/bricelam\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/efteam_bricelam.jpeg\" alt=\"\" width=\"200px\" \/>\nBrice Lambson<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/JeremyLikness\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/efteam_JeremyLikness.jpeg\" alt=\"JeremyLikness\" width=\"200px\" \/>\nJeremy Likness<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/lajones\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/efteam_lajones.jpeg\" alt=\"lajones\" width=\"200px\" \/>\nlajones<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/maumar\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/efteam_maumar.jpeg\" alt=\"maumar\" width=\"200px\" \/>\nMaurycy Markowski<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/roji\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/efteam_roji-1-300x300.png\" alt=\"roji\" width=\"200px\" \/>\nShay Rojansky<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/smitpatel\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/efteam_smitpatel.png\" alt=\"smitpatel\" width=\"200px\" \/>\nSmit Patel<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h2 id=\"thank-you-to-our-contributors-\">Thank you to our contributors!<\/h2>\n<p>A big thank you to the following community members who have already contributed code or documentation to the EF Core 5 release! (List is in chronological order of first contribution to EF Core 5).<\/p>\n<table>\n<tbody>\n<tr>\n<td><a href=\"https:\/\/github.com\/aevitas\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_aevitas.jpeg\" alt=\"aevitas\" width=\"200px\" \/>\naevitas<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/alaatm\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_alaatm.png\" alt=\"alaatm\" width=\"200px\" \/>\nAlaa Masoud<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/aleksandar-manukov\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_aleksandar-manukov.png\" alt=\"aleksandar-manukov\" width=\"200px\" \/>\nAleksandar Manukov<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/amrbadawy\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_amrbadawy.jpeg\" alt=\"amrbadawy\" width=\"200px\" \/>\nAmr Badawy<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/AnthonyMonterrosa\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_AnthonyMonterrosa.jpeg\" alt=\"AnthonyMonterrosa\" width=\"200px\" \/>\nAnthony Monterrosa<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/bbrandt\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_bbrandt.jpeg\" alt=\"bbrandt\" width=\"200px\" \/>\nBen Brandt<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/benmccallum\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_benmccallum.jpeg\" alt=\"benmccallum\" width=\"200px\" \/>\nBen McCallum<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/ccjx\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_ccjx.png\" alt=\"ccjx\" width=\"200px\" \/>\nClarence Cai<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/CGijbels\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_CGijbels.jpeg\" alt=\"CGijbels\" width=\"200px\" \/>\nChristophe Gijbels<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/cincuranet\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_cincuranet.png\" alt=\"cincuranet\" width=\"200px\" \/>\nJiri Cincura<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/Costo\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_Costo.jpeg\" alt=\"Costo\" width=\"200px\" \/>\nVincent Costel<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/dshuvaev\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_dshuvaev.jpeg\" alt=\"dshuvaev\" width=\"200px\" \/>\nDmitry Shuvaev<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/EricStG\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_EricStG.jpeg\" alt=\"EricStG\" width=\"200px\" \/>\nEric St-Georges<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/ErikEJ\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_ErikEJ.jpeg\" alt=\"ErikEJ\" width=\"200px\" \/>\nErik Ejlskov Jensen<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/gravbox\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_gravbox.png\" alt=\"gravbox\" width=\"200px\" \/>\nChristopher Davis<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/ivaylokenov\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_ivaylokenov.jpeg\" alt=\"ivaylokenov\" width=\"200px\" \/>\nIvaylo Kenov<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/jfoshee\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_jfoshee.png\" alt=\"jfoshee\" width=\"200px\" \/>\nJacob Foshee<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/jmzagorski\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_jmzagorski.png\" alt=\"jmzagorski\" width=\"200px\" \/>\nJeremy Zagorski<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/jviau\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_jviau.jpeg\" alt=\"jviau\" width=\"200px\" \/>\nJacob Viau<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/knom\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_knom.png\" alt=\"knom\" width=\"200px\" \/>\nMax K.<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/lohoris-crane\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_lohoris-crane.jpeg\" alt=\"lohoris-crane\" width=\"200px\" \/>\nlohoris-crane<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/loic-sharma\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_loic-sharma.jpeg\" alt=\"loic-sharma\" width=\"200px\" \/>\nLo\u00efc Sharma<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/lokalmatador\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_lokalmatador.jpeg\" alt=\"lokalmatador\" width=\"200px\" \/>\nlokalmatador<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/mariusGundersen\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_mariusGundersen.png\" alt=\"mariusGundersen\" width=\"200px\" \/>\nMarius Gundersen<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/Marusyk\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_Marusyk.jpeg\" alt=\"Marusyk\" width=\"200px\" \/>\nRoman Marusyk<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/matthiaslischka\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_matthiaslischka.jpeg\" alt=\"matthiaslischka\" width=\"200px\" \/>\nMatthias Lischka<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/MaxG117\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_MaxG117.png\" alt=\"MaxG117\" width=\"200px\" \/>\nMaxG117<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/MHDuke\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_MHDuke.jpeg\" alt=\"MHDuke\" width=\"200px\" \/>\nMHDuke<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/mikes-gh\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_mikes-gh.png\" alt=\"mikes-gh\" width=\"200px\" \/>\nMike Surcouf<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/Muppets\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_Muppets.jpeg\" alt=\"Muppets\" width=\"200px\" \/>\nNeil Bostrom<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/nmichels\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_nmichels.jpeg\" alt=\"nmichels\" width=\"200px\" \/>\nN\u00edcolas Michels<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/OOberoi\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_OOberoi.jpeg\" alt=\"OOberoi\" width=\"200px\" \/>\nObi Oberoi<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/orionstudt\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_orionstudt.jpeg\" alt=\"orionstudt\" width=\"200px\" \/>\nJosh Studt<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/ozantopal\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_ozantopal.jpeg\" alt=\"ozantopal\" width=\"200px\" \/>\nOzan Topal<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/pmiddleton\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_pmiddleton.jpeg\" alt=\"pmiddleton\" width=\"200px\" \/>\nPaul Middleton<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/prog-rajkamal\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_prog-rajkamal.jpeg\" alt=\"prog-rajkamal\" width=\"200px\" \/>\nRaj<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/ptjhuang\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_ptjhuang.png\" alt=\"ptjhuang\" width=\"200px\" \/>\nPeter Huang<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/ralmsdeveloper\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_ralmsdeveloper.png\" alt=\"ralmsdeveloper\" width=\"200px\" \/>\nRafael Almeida Santos<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/redoz\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_redoz.png\" alt=\"redoz\" width=\"200px\" \/>\nPatrik Husfloen<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/rmarskell\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_rmarskell.jpeg\" alt=\"rmarskell\" width=\"200px\" \/>\nRichard Marskell<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/sguitardude\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_sguitardude.jpeg\" alt=\"sguitardude\" width=\"200px\" \/>\nsguitardude<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/SimpleSamples\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_SimpleSamples.png\" alt=\"SimpleSamples\" width=\"200px\" \/>\nSam Hobbs<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/svengeance\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_svengeance.png\" alt=\"svengeance\" width=\"200px\" \/>\nSven<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/VladDragnea\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_VladDragnea.jpeg\" alt=\"VladDragnea\" width=\"200px\" \/>\nVlad<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/vslee\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_vslee.png\" alt=\"vslee\" width=\"200px\" \/>\nvslee<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/WeihanLi\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_WeihanLi.jpeg\" alt=\"WeihanLi\" width=\"200px\" \/>\nliweihan<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/Youssef1313\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_Youssef1313.jpeg\" alt=\"Youssef1313\" width=\"200px\" \/>\nYoussef Victor<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/1iveowl\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/1iveowl.jpg\" alt=\"1iveowl\" width=\"200px\" \/>\n1iveowl<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/thomaslevesque\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_thomaslevesque.png\" alt=\"thomaslevesque\" width=\"200px\" \/>\nThomas Levesque<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/akovac35\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_akovac35.png\" alt=\"akovac35\" width=\"200px\" \/>\nAleksander Kova\u010d<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/leotsarev\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_leotsarev.jpg\" alt=\"leotsarev\" width=\"200px\" \/>\nLeonid Tsarev<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/kostat\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/03\/contributor_kostat.jpg\" alt=\"kostat\" width=\"200px\" \/>\nKonstantin Triger<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/sungam3r\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/04\/contributor_sungam3r.png\" alt=\"sungam3r\" width=\"200px\" \/>\nIvan Maximov<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/dzmitry-lahoda\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/04\/contributor_dzmitry-lahoda.jpg\" alt=\"dzmitry-lahoda\" width=\"200px\" \/>\nDzmitry Lahoda<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/Logerfo\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/04\/contributor_logerfo.jpg\" alt=\"Logerfo\" width=\"200px\" \/>\nBruno Logerfo<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/witheej\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/05\/contributor_witheej.jpg\" alt=\"witheej\" width=\"200px\" \/>\nJosh Withee<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/FransBouma\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/05\/contributor_FransBouma.png\" alt=\"FransBouma\" width=\"200px\" \/>\nFrans Bouma<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/IGx89\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/05\/contributor_IGx89.png\" alt=\"IGx89\" width=\"200px\" \/>\nMatthew Lieder<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/paulomorgado\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/05\/contributor_paulomorgado.jpg\" alt=\"paulomorgado\" width=\"200px\" \/>\nPaulo Morgado<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/mderriey\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/05\/contributor_mderriey.jpg\" alt=\"mderriey\" width=\"200px\" \/>\nMicka\u00ebl Derriey<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/LaurenceJKing\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/05\/contributor_LaurenceJKing.jpg\" alt=\"LaurenceJKing\" width=\"200px\" \/>\nLaurence King<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/oskarj\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/05\/contributor_oskarj.png\" alt=\"oskarj\" width=\"200px\" \/>\nOskar Josefsson<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/bdebaere\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/05\/contributor_bdebaere.jpg\" alt=\"bdebaere\" width=\"200px\" \/>\nbdebaere<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/BhargaviAnnadevara-MSFT\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/05\/contributor_BhargaviAnnadevara-MSFT.jpg\" alt=\"BhargaviAnnadevara-MSFT\" width=\"200px\" \/>\nBhargavi Annadevara<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/AlexanderTaeschner\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/05\/contributor_AlexanderTaeschner.png\" alt=\"AlexanderTaeschner\" width=\"200px\" \/>\nAlexander T\u00e4schner<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/Jesse-Hufstetler\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/05\/contributor_Jesse-Hufstetler.png\" alt=\"Jesse-Hufstetler\" width=\"200px\" \/>\nJesse Hufstetler<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/ivarlovlie\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/06\/contributor_ivarlovlie.png\" alt=\"ivarlovlie\" width=\"200px\" \/>\nIvar L\u00f8vlie<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/cucoreanu\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/06\/contributor_cucoreanu.jpg\" alt=\"cucoreanu\" width=\"200px\" \/>\ncucoreanu<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/serpent5\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/06\/contributor_serpent5.png\" alt=\"serpent5\" width=\"200px\" \/>\nKirk Larkin<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/sdanyliv\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/06\/contributor_sdanyliv.jpg\" alt=\"sdanyliv\" width=\"200px\" \/>\nSvyatoslav Danyliv<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/twenzel\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/06\/contributor_twenzel.jpg\" alt=\"twenzel\" width=\"200px\" \/>\nToni Wenzel<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/manvydasu\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/06\/contributor_manvydasu.png\" alt=\"manvydasu\" width=\"200px\" \/>\nmanvydasu<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/brandongregoryscott\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/05\/contributor_AlexanderTaeschner.png\" alt=\"brandongregoryscott\" width=\"200px\" \/>\nBrandon Scott<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/uncheckederror\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/06\/contributor_uncheckederror.jpg\" alt=\"uncheckederror\" width=\"200px\" \/>\nThomas Ryan<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/rocke97\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/06\/contributor_rocke97.jpg\" alt=\"rocke97\" width=\"200px\" \/>\nAaron Gunther<\/a><\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>Today, the Entity Framework Core team announces the sixth preview release of EF Core 5.0. This release includes split queries for related collections, a new &#8220;index&#8221; attribute, improved exceptions related to query translations, IP address mapping, exposing transaction id for correlation, and much more. Prerequisites EF Core 5.0 will not run on .NET Standard 2.0 [&hellip;]<\/p>\n","protected":false},"author":368,"featured_media":28752,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[196,756,859],"tags":[9,30,70,71],"class_list":["post-28750","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet-core","category-csharp","category-entity-framework","tag-net-core","tag-announcement","tag-entity-framework","tag-entity-framework-core"],"acf":[],"blog_post_summary":"<p>Today, the Entity Framework Core team announces the sixth preview release of EF Core 5.0. This release includes split queries for related collections, a new &#8220;index&#8221; attribute, improved exceptions related to query translations, IP address mapping, exposing transaction id for correlation, and much more. Prerequisites EF Core 5.0 will not run on .NET Standard 2.0 [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/28750","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/users\/368"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/comments?post=28750"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/28750\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media\/28752"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media?parent=28750"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=28750"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=28750"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}