{"id":29420,"date":"2020-08-25T13:19:28","date_gmt":"2020-08-25T20:19:28","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/dotnet\/?p=29420"},"modified":"2020-08-26T09:39:54","modified_gmt":"2020-08-26T16:39:54","slug":"announcing-entity-framework-core-ef-core-5-0-preview-8","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/announcing-entity-framework-core-ef-core-5-0-preview-8\/","title":{"rendered":"Announcing Entity Framework Core (EF Core) 5.0 Preview 8"},"content":{"rendered":"<p>Today, the Entity Framework Core team announces the eighth and final preview release of\n<a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore\/5.0.0-preview.8.20407.4\">EF Core 5.0<\/a>. The next release will be a release candidate (RC).\nThis release includes table-per-type (TPT) mapping, table-valued functions, SQLite table rebuilds for migrations and much more.<\/p>\n<pre><code class=\"lang-dotnetcli\">                     _\/\\__\r\n               ---==\/    \\\\\r\n         ___  ___   |<span class=\"hljs-string\">.    \\<\/span>|<span class=\"hljs-string\">\\\r\n        <\/span>|<span class=\"hljs-string\"> __<\/span>||<span class=\"hljs-string\"> __<\/span>|  |<span class=\"hljs-string\">  )   \\\\\\\r\n        <\/span>|<span class=\"hljs-string\"> _<\/span>| |<span class=\"hljs-string\"> _<\/span>|<span class=\"hljs-string\">   \\_\/ <\/span>|<span class=\"hljs-string\">  \/\/<\/span>|<span class=\"hljs-string\">\\\\\r\n        <\/span>|<span class=\"hljs-string\">___<\/span>||<span class=\"hljs-string\">_<\/span>|<span class=\"hljs-string\">       \/   \\\\\\\/\\\\\r\n\r\n  _______ _                 _                                    \r\n <\/span>|<span class=\"hljs-string\">__   __<\/span>| |               | |                                   \r\n    | |  | |<span class=\"hljs-string\">__   __ _ _ __ <\/span>| |<span class=\"hljs-string\"> __  _   _  ___  _   _             \r\n    <\/span>| |  |<span class=\"hljs-string\"> '_ \\ \/ _` <\/span>|<span class=\"hljs-string\"> '_ \\<\/span>| |<span class=\"hljs-string\">\/ \/ <\/span>| | | |<span class=\"hljs-string\">\/ _ \\<\/span>| | | |            \r\n    | |  | | | |<span class=\"hljs-string\"> (_<\/span>| | | | |<span class=\"hljs-string\">   &lt;  <\/span>| |<span class=\"hljs-string\">_<\/span>| |<span class=\"hljs-string\"> (_) <\/span>| |<span class=\"hljs-string\">_<\/span>| |<span class=\"hljs-string\">  _   _   _ \r\n    <\/span>|<span class=\"hljs-string\">_<\/span>|  |<span class=\"hljs-string\">_<\/span>| |<span class=\"hljs-string\">_<\/span>|<span class=\"hljs-string\">\\__,_<\/span>|<span class=\"hljs-string\">_<\/span>| |<span class=\"hljs-string\">_<\/span>|<span class=\"hljs-string\">_<\/span>|<span class=\"hljs-string\">\\_\\  \\__, <\/span>|<span class=\"hljs-string\">\\___\/ \\__,_<\/span>|<span class=\"hljs-string\"> (_) (_) (_)\r\n                                    __\/ <\/span>|                        \r\n                                   |<span class=\"hljs-string\">___\/<\/span>\r\n<\/code><\/pre>\n<p><strong>The EF Core team gives a warm thanks to the nearly 100 community contributors to EF Core 5.0.<\/strong><\/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<ul>\n<li>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>.<\/li>\n<li>This means that EF Core 5.0 will run on .NET Core 3.1 and does <em>not<\/em> require .NET 5.<\/li>\n<\/ul>\n<blockquote><p>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><\/blockquote>\n<p><strong>The product will maintain .NET Standard 2.1 compatibility through the final release.<\/strong><\/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<\/span><span class=\"hljs-selector-class\">.8<\/span><span class=\"hljs-selector-class\">.20407<\/span><span class=\"hljs-selector-class\">.4<\/span>\r\n<\/code><\/pre>\n<p>This following table links to the preview 8 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.8.20407.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.8.20407.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.8.20407.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.8.20407.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.8.20407.4\">Microsoft.EntityFrameworkCore.Sqlite.Core<\/a><\/td>\n<td style=\"text-align: left;\">Database provider for SQLite <i>without<\/i> 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.8.20407.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.8.20407.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.8.20407.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.8.20407.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.8.20407.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.8.20407.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.8.20407.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.8.20407.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.8.20407.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<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,\nyou&#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\/08\/efpreview8.jpg\" alt=\"dotnet-ef\" \/><\/p>\n<p>To install the preview tool globally the first time, use:<\/p>\n<pre><code class=\"lang-bash\"><span class=\"hljs-selector-tag\">dotnet<\/span> <span class=\"hljs-selector-tag\">tool<\/span> <span class=\"hljs-selector-tag\">install<\/span> <span class=\"hljs-selector-tag\">--global<\/span> <span class=\"hljs-selector-tag\">dotnet-ef<\/span> <span class=\"hljs-selector-tag\">--version<\/span> 5<span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.0-preview<\/span><span class=\"hljs-selector-class\">.8<\/span><span class=\"hljs-selector-class\">.20407<\/span><span class=\"hljs-selector-class\">.4<\/span>\r\n<\/code><\/pre>\n<p>If you already have the tool installed, update it with:<\/p>\n<pre><code class=\"lang-bash\"><span class=\"hljs-selector-tag\">dotnet<\/span> <span class=\"hljs-selector-tag\">tool<\/span> <span class=\"hljs-selector-tag\">update<\/span> <span class=\"hljs-selector-tag\">--global<\/span> <span class=\"hljs-selector-tag\">dotnet-ef<\/span> <span class=\"hljs-selector-tag\">--version<\/span> 5<span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.0-preview<\/span><span class=\"hljs-selector-class\">.8<\/span><span class=\"hljs-selector-class\">.20407<\/span><span class=\"hljs-selector-class\">.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-8\">What&#8217;s New in EF Core 5 Preview 8<\/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 8 are called out below. This preview also includes several bug fixes.<\/p>\n<h3 id=\"table-per-type-tpt-mapping\">Table-per-type (TPT) mapping<\/h3>\n<p>By default, EF Core maps an inheritance hierarchy of .NET types to a single database table. This is known as table-per-hierarchy (TPH) mapping. EF Core 5.0 also allows mapping each .NET type in an inheritance hierarchy to a different database table; known as table-per-type (TPT) mapping.<\/p>\n<p>For example, consider this model with a mapped hierarchy:<\/p>\n<pre><code class=\"lang-c#\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Animal<\/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> <span class=\"hljs-keyword\">string<\/span> Species { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Pet<\/span> : <span class=\"hljs-title\">Animal<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Name { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Cat<\/span> : <span class=\"hljs-title\">Pet<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> EdcuationLevel { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Dog<\/span> : <span class=\"hljs-title\">Pet<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> FavoriteToy { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n<\/code><\/pre>\n<p>By default, EF Core will map this to a single table:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">CREATE<\/span> <span class=\"hljs-keyword\">TABLE<\/span> [Animals] (\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> <span class=\"hljs-keyword\">IDENTITY<\/span>,\r\n    [Species] <span class=\"hljs-keyword\">nvarchar<\/span>(<span class=\"hljs-keyword\">max<\/span>) <span class=\"hljs-literal\">NULL<\/span>,\r\n    [Discriminator] <span class=\"hljs-keyword\">nvarchar<\/span>(<span class=\"hljs-keyword\">max<\/span>) <span class=\"hljs-keyword\">NOT<\/span> <span class=\"hljs-literal\">NULL<\/span>,\r\n    [<span class=\"hljs-keyword\">Name<\/span>] <span class=\"hljs-keyword\">nvarchar<\/span>(<span class=\"hljs-keyword\">max<\/span>) <span class=\"hljs-literal\">NULL<\/span>,\r\n    [EdcuationLevel] <span class=\"hljs-keyword\">nvarchar<\/span>(<span class=\"hljs-keyword\">max<\/span>) <span class=\"hljs-literal\">NULL<\/span>,\r\n    [FavoriteToy] <span class=\"hljs-keyword\">nvarchar<\/span>(<span class=\"hljs-keyword\">max<\/span>) <span class=\"hljs-literal\">NULL<\/span>,\r\n    <span class=\"hljs-keyword\">CONSTRAINT<\/span> [PK_Animals] PRIMARY <span class=\"hljs-keyword\">KEY<\/span> ([<span class=\"hljs-keyword\">Id<\/span>])\r\n);\r\n<\/code><\/pre>\n<p>However, mapping each entity type to a different table will instead result in one table per type:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">CREATE<\/span> <span class=\"hljs-keyword\">TABLE<\/span> [Animals] (\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> <span class=\"hljs-keyword\">IDENTITY<\/span>,\r\n    [Species] <span class=\"hljs-keyword\">nvarchar<\/span>(<span class=\"hljs-keyword\">max<\/span>) <span class=\"hljs-literal\">NULL<\/span>,\r\n    <span class=\"hljs-keyword\">CONSTRAINT<\/span> [PK_Animals] PRIMARY <span class=\"hljs-keyword\">KEY<\/span> ([<span class=\"hljs-keyword\">Id<\/span>])\r\n);\r\n\r\n<span class=\"hljs-keyword\">CREATE<\/span> <span class=\"hljs-keyword\">TABLE<\/span> [Pets] (\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    [<span class=\"hljs-keyword\">Name<\/span>] <span class=\"hljs-keyword\">nvarchar<\/span>(<span class=\"hljs-keyword\">max<\/span>) <span class=\"hljs-literal\">NULL<\/span>,\r\n    <span class=\"hljs-keyword\">CONSTRAINT<\/span> [PK_Pets] PRIMARY <span class=\"hljs-keyword\">KEY<\/span> ([<span class=\"hljs-keyword\">Id<\/span>]),\r\n    <span class=\"hljs-keyword\">CONSTRAINT<\/span> [FK_Pets_Animals_Id] FOREIGN <span class=\"hljs-keyword\">KEY<\/span> ([<span class=\"hljs-keyword\">Id<\/span>]) <span class=\"hljs-keyword\">REFERENCES<\/span> [Animals] ([<span class=\"hljs-keyword\">Id<\/span>]) <span class=\"hljs-keyword\">ON<\/span> <span class=\"hljs-keyword\">DELETE<\/span> <span class=\"hljs-keyword\">NO<\/span> <span class=\"hljs-keyword\">ACTION<\/span>\r\n);\r\n\r\n<span class=\"hljs-keyword\">CREATE<\/span> <span class=\"hljs-keyword\">TABLE<\/span> [Cats] (\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    [EdcuationLevel] <span class=\"hljs-keyword\">nvarchar<\/span>(<span class=\"hljs-keyword\">max<\/span>) <span class=\"hljs-literal\">NULL<\/span>,\r\n    <span class=\"hljs-keyword\">CONSTRAINT<\/span> [PK_Cats] PRIMARY <span class=\"hljs-keyword\">KEY<\/span> ([<span class=\"hljs-keyword\">Id<\/span>]),\r\n    <span class=\"hljs-keyword\">CONSTRAINT<\/span> [FK_Cats_Animals_Id] FOREIGN <span class=\"hljs-keyword\">KEY<\/span> ([<span class=\"hljs-keyword\">Id<\/span>]) <span class=\"hljs-keyword\">REFERENCES<\/span> [Animals] ([<span class=\"hljs-keyword\">Id<\/span>]) <span class=\"hljs-keyword\">ON<\/span> <span class=\"hljs-keyword\">DELETE<\/span> <span class=\"hljs-keyword\">NO<\/span> <span class=\"hljs-keyword\">ACTION<\/span>,\r\n    <span class=\"hljs-keyword\">CONSTRAINT<\/span> [FK_Cats_Pets_Id] FOREIGN <span class=\"hljs-keyword\">KEY<\/span> ([<span class=\"hljs-keyword\">Id<\/span>]) <span class=\"hljs-keyword\">REFERENCES<\/span> [Pets] ([<span class=\"hljs-keyword\">Id<\/span>]) <span class=\"hljs-keyword\">ON<\/span> <span class=\"hljs-keyword\">DELETE<\/span> <span class=\"hljs-keyword\">NO<\/span> <span class=\"hljs-keyword\">ACTION<\/span>\r\n);\r\n\r\n<span class=\"hljs-keyword\">CREATE<\/span> <span class=\"hljs-keyword\">TABLE<\/span> [Dogs] (\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    [FavoriteToy] <span class=\"hljs-keyword\">nvarchar<\/span>(<span class=\"hljs-keyword\">max<\/span>) <span class=\"hljs-literal\">NULL<\/span>,\r\n    <span class=\"hljs-keyword\">CONSTRAINT<\/span> [PK_Dogs] PRIMARY <span class=\"hljs-keyword\">KEY<\/span> ([<span class=\"hljs-keyword\">Id<\/span>]),\r\n    <span class=\"hljs-keyword\">CONSTRAINT<\/span> [FK_Dogs_Animals_Id] FOREIGN <span class=\"hljs-keyword\">KEY<\/span> ([<span class=\"hljs-keyword\">Id<\/span>]) <span class=\"hljs-keyword\">REFERENCES<\/span> [Animals] ([<span class=\"hljs-keyword\">Id<\/span>]) <span class=\"hljs-keyword\">ON<\/span> <span class=\"hljs-keyword\">DELETE<\/span> <span class=\"hljs-keyword\">NO<\/span> <span class=\"hljs-keyword\">ACTION<\/span>,\r\n    <span class=\"hljs-keyword\">CONSTRAINT<\/span> [FK_Dogs_Pets_Id] FOREIGN <span class=\"hljs-keyword\">KEY<\/span> ([<span class=\"hljs-keyword\">Id<\/span>]) <span class=\"hljs-keyword\">REFERENCES<\/span> [Pets] ([<span class=\"hljs-keyword\">Id<\/span>]) <span class=\"hljs-keyword\">ON<\/span> <span class=\"hljs-keyword\">DELETE<\/span> <span class=\"hljs-keyword\">NO<\/span> <span class=\"hljs-keyword\">ACTION<\/span>\r\n);\r\n<\/code><\/pre>\n<p>Note that creation of the foreign key constraints shown above were added after branching the code for preview 8.<\/p>\n<p>Entity types can be mapped to different tables using mapping attributes:<\/p>\n<pre><code class=\"lang-c#\">[Table(<span class=\"hljs-string\">\"Animals\"<\/span>)]\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Animal<\/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> <span class=\"hljs-keyword\">string<\/span> Species { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n\r\n[Table(<span class=\"hljs-string\">\"Pets\"<\/span>)]\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Pet<\/span> : <span class=\"hljs-title\">Animal<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Name { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n\r\n[Table(<span class=\"hljs-string\">\"Cats\"<\/span>)]\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Cat<\/span> : <span class=\"hljs-title\">Pet<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> EdcuationLevel { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n\r\n[Table(<span class=\"hljs-string\">\"Dogs\"<\/span>)]\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Dog<\/span> : <span class=\"hljs-title\">Pet<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> FavoriteToy { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n<\/code><\/pre>\n<p>Or using <code>ModelBuilder<\/code> configuration:<\/p>\n<pre><code class=\"lang-c#\">protected override void OnModelCreating(ModelBuilder modelBuilder)\r\n{\r\n    modelBuilder.Entity&lt;Animal&gt;().ToTable(<span class=\"hljs-string\">\"Animals\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n    modelBuilder.Entity&lt;Pet&gt;().ToTable(<span class=\"hljs-string\">\"Pets\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n    modelBuilder.Entity&lt;Cat&gt;().ToTable(<span class=\"hljs-string\">\"Cats\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n    modelBuilder.Entity&lt;Dog&gt;().ToTable(<span class=\"hljs-string\">\"Dogs\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n}\r\n<\/code><\/pre>\n<p>Documentation is tracked by issue <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/issues\/1979\">#1979<\/a>.<\/p>\n<h3 id=\"migrations-rebuild-sqlite-tables\">Migrations: Rebuild SQLite tables<\/h3>\n<p>Compared to other database, SQLite is relatively limited in its schema manipulation capabilities. For example, dropping a column from an existing table requires that the entire table be dropped and re-created. EF Core 5.0 Migrations now supports automatic rebuilding the table for schema changes that require it.<\/p>\n<p>For example, imagine we have a <code>Unicorns<\/code> table created for a <code>Unicorn<\/code> entity type:<\/p>\n<pre><code class=\"lang-c#\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Unicorn<\/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> <span class=\"hljs-keyword\">string<\/span> Name { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> Age { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n<\/code><\/pre>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">CREATE<\/span> <span class=\"hljs-keyword\">TABLE<\/span> <span class=\"hljs-string\">\"Unicorns\"<\/span> (\r\n    <span class=\"hljs-string\">\"Id\"<\/span> <span class=\"hljs-built_in\">INTEGER<\/span> <span class=\"hljs-keyword\">NOT<\/span> <span class=\"hljs-literal\">NULL<\/span> <span class=\"hljs-keyword\">CONSTRAINT<\/span> <span class=\"hljs-string\">\"PK_Unicorns\"<\/span> PRIMARY <span class=\"hljs-keyword\">KEY<\/span> AUTOINCREMENT,\r\n    <span class=\"hljs-string\">\"Name\"<\/span> <span class=\"hljs-built_in\">TEXT<\/span> <span class=\"hljs-literal\">NULL<\/span>,\r\n    <span class=\"hljs-string\">\"Age\"<\/span> <span class=\"hljs-built_in\">INTEGER<\/span> <span class=\"hljs-keyword\">NOT<\/span> <span class=\"hljs-literal\">NULL<\/span>\r\n);\r\n<\/code><\/pre>\n<p>We then learn that storing the age of a unicorn is considered very rude, so let&#8217;s remove that property, add a new migration, and update the database. This update will fail when using EF Core 3.1 because the column cannot be dropped. In EF Core 5.0, Migrations will instead rebuild the table:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">CREATE<\/span> <span class=\"hljs-keyword\">TABLE<\/span> <span class=\"hljs-string\">\"ef_temp_Unicorns\"<\/span> (\r\n    <span class=\"hljs-string\">\"Id\"<\/span> <span class=\"hljs-built_in\">INTEGER<\/span> <span class=\"hljs-keyword\">NOT<\/span> <span class=\"hljs-literal\">NULL<\/span> <span class=\"hljs-keyword\">CONSTRAINT<\/span> <span class=\"hljs-string\">\"PK_Unicorns\"<\/span> PRIMARY <span class=\"hljs-keyword\">KEY<\/span> AUTOINCREMENT,\r\n    <span class=\"hljs-string\">\"Name\"<\/span> <span class=\"hljs-built_in\">TEXT<\/span> <span class=\"hljs-literal\">NULL<\/span>\r\n);\r\n\r\n<span class=\"hljs-keyword\">INSERT<\/span> <span class=\"hljs-keyword\">INTO<\/span> <span class=\"hljs-string\">\"ef_temp_Unicorns\"<\/span> (<span class=\"hljs-string\">\"Id\"<\/span>, <span class=\"hljs-string\">\"Name\"<\/span>)\r\n<span class=\"hljs-keyword\">SELECT<\/span> <span class=\"hljs-string\">\"Id\"<\/span>, <span class=\"hljs-string\">\"Name\"<\/span>\r\n<span class=\"hljs-keyword\">FROM<\/span> Unicorns;\r\n\r\n<span class=\"hljs-keyword\">PRAGMA<\/span> foreign_keys = <span class=\"hljs-number\">0<\/span>;\r\n\r\n<span class=\"hljs-keyword\">DROP<\/span> <span class=\"hljs-keyword\">TABLE<\/span> <span class=\"hljs-string\">\"Unicorns\"<\/span>;\r\n\r\n<span class=\"hljs-keyword\">ALTER<\/span> <span class=\"hljs-keyword\">TABLE<\/span> <span class=\"hljs-string\">\"ef_temp_Unicorns\"<\/span> <span class=\"hljs-keyword\">RENAME<\/span> <span class=\"hljs-keyword\">TO<\/span> <span class=\"hljs-string\">\"Unicorns\"<\/span>;\r\n\r\n<span class=\"hljs-keyword\">PRAGMA<\/span> foreign_keys = <span class=\"hljs-number\">1<\/span>;\r\n<\/code><\/pre>\n<p>Notice that:<\/p>\n<ul>\n<li>A temporary table is created with the desired schema for the new table<\/li>\n<li>Data is copied from the current table into the temporary table<\/li>\n<li>Foreign key enforcement is switched off<\/li>\n<li>The current table is dropped<\/li>\n<li>The temporary table is renamed to be the new table<\/li>\n<\/ul>\n<p>Documentation is tracked by issue <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/issues\/2583\">#2583<\/a>.<\/p>\n<h3 id=\"table-valued-functions\">Table-valued functions<\/h3>\n<p>This feature was contributed from the community by <a href=\"https:\/\/github.com\/pmiddleton\">@pmiddleton<\/a>. Many thanks for the contribution!<\/p>\n<p>EF Core 5.0 includes first-class support for mapping .NET methods to table-valued functions (TVFs). These functions can then be used in LINQ queries where additional composition on the results of the function will also be translated to SQL.<\/p>\n<p>For example, consider this TVF defined in a SQL Server database:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">create<\/span> <span class=\"hljs-keyword\">FUNCTION<\/span> GetReports(@employeeId <span class=\"hljs-built_in\">int<\/span>)\r\n<span class=\"hljs-keyword\">RETURNS<\/span> @reports <span class=\"hljs-keyword\">TABLE<\/span>\r\n(\r\n    <span class=\"hljs-keyword\">Name<\/span> <span class=\"hljs-keyword\">nvarchar<\/span>(<span class=\"hljs-number\">50<\/span>) <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-literal\">null<\/span>,\r\n    IsDeveloper <span class=\"hljs-built_in\">bit<\/span> <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-literal\">null<\/span>\r\n)\r\n<span class=\"hljs-keyword\">AS<\/span>\r\n<span class=\"hljs-keyword\">begin<\/span>\r\n    <span class=\"hljs-keyword\">WITH<\/span> cteEmployees <span class=\"hljs-keyword\">AS<\/span>\r\n    (\r\n        <span class=\"hljs-keyword\">SELECT<\/span> <span class=\"hljs-keyword\">id<\/span>, <span class=\"hljs-keyword\">name<\/span>, managerId, isDeveloper\r\n        <span class=\"hljs-keyword\">FROM<\/span> employees\r\n        <span class=\"hljs-keyword\">WHERE<\/span> <span class=\"hljs-keyword\">id<\/span> = @employeeId\r\n        <span class=\"hljs-keyword\">UNION<\/span> ALL\r\n        <span class=\"hljs-keyword\">SELECT<\/span> e.id, e.name, e.managerId, e.isDeveloper\r\n        <span class=\"hljs-keyword\">FROM<\/span> employees e\r\n        <span class=\"hljs-keyword\">INNER<\/span> <span class=\"hljs-keyword\">JOIN<\/span> cteEmployees cteEmp <span class=\"hljs-keyword\">ON<\/span> cteEmp.id = e.ManagerId\r\n    )\r\n\r\n    <span class=\"hljs-keyword\">insert<\/span> <span class=\"hljs-keyword\">into<\/span> @reports\r\n    <span class=\"hljs-keyword\">select<\/span> <span class=\"hljs-keyword\">name<\/span>, isDeveloper\r\n    <span class=\"hljs-keyword\">FROM<\/span> cteEmployees\r\n    <span class=\"hljs-keyword\">where<\/span> <span class=\"hljs-keyword\">id<\/span> != @employeeId\r\n\r\n    <span class=\"hljs-keyword\">return<\/span>\r\n<span class=\"hljs-keyword\">end<\/span>\r\n<\/code><\/pre>\n<p>The EF Core model requires two entity types to use this TVF:<\/p>\n<ul>\n<li>An <code>Employee<\/code> type that maps to the Employees table in the normal way<\/li>\n<li>A <code>Report<\/code> type that matches the shape returned by the TVF<\/li>\n<\/ul>\n<pre><code class=\"lang-c#\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/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> <span class=\"hljs-keyword\">string<\/span> Name { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">bool<\/span> IsDeveloper { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span>? ManagerId { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">virtual<\/span> Employee Manager { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n<\/code><\/pre>\n<pre><code class=\"lang-c#\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Report<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Name { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">bool<\/span> IsDeveloper { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n<\/code><\/pre>\n<p>These types must be included in the EF Core model:<\/p>\n<pre><code class=\"lang-c#\"><span class=\"hljs-title\">modelBuilder<\/span>.<span class=\"hljs-type\">Entity<\/span>&lt;<span class=\"hljs-type\">Employee<\/span>&gt;();\r\n<span class=\"hljs-title\">modelBuilder<\/span>.<span class=\"hljs-type\">Entity<\/span>(typeof(<span class=\"hljs-type\">Report<\/span>)).<span class=\"hljs-type\">HasNoKey<\/span>();\r\n<\/code><\/pre>\n<p>Notice that <code>Report<\/code> has no primary key and so must be configured as such.<\/p>\n<p>Finally, a .NET method must be mapped to the TVF in the database. This method can be defined on the DbContext using the new <code>FromExpression<\/code> method:<\/p>\n<pre><code class=\"lang-c#\">public IQueryable&lt;Report&gt; GetReports(<span class=\"hljs-name\">int<\/span> managerId)\r\n    =&gt; FromExpression(() =&gt; GetReports(<span class=\"hljs-name\">managerId<\/span>))<span class=\"hljs-comment\">;<\/span>\r\n<\/code><\/pre>\n<p>This method uses a parameter and return type that match the TVF defined above. The method is then added to the EF Core model in OnModelCreating:<\/p>\n<pre><code class=\"lang-c#\">modelBuilder.HasDbFunction(<span class=\"hljs-function\"><span class=\"hljs-params\">()<\/span> =&gt;<\/span> GetReports(<span class=\"hljs-number\">0<\/span>));\r\n<\/code><\/pre>\n<p>(Using a lambda here is an easy way to pass the <code>MethodInfo<\/code> to EF Core. The arguments passed to the method are ignored.)<\/p>\n<p>We can now write queries that call <code>GetReports<\/code> and compose over the results. For example:<\/p>\n<pre><code class=\"lang-c#\">from e <span class=\"hljs-keyword\">in<\/span> context<span class=\"hljs-selector-class\">.Employees<\/span>\r\nfrom rc <span class=\"hljs-keyword\">in<\/span> context.GetReports(e.Id)\r\nwhere rc<span class=\"hljs-selector-class\">.IsDeveloper<\/span> == true\r\nselect new\r\n{\r\n  ManagerName = e<span class=\"hljs-selector-class\">.Name<\/span>,\r\n  EmployeeName = rc<span class=\"hljs-selector-class\">.Name<\/span>,\r\n})\r\n<\/code><\/pre>\n<p>On SQL Server, this translates to:<\/p>\n<pre><code class=\"lang-sql\">SELECT [e].[Name] AS [ManagerName], [g].[Name] AS [EmployeeName]\r\nFROM [Employees] AS [e]\r\nCROSS APPLY [<span class=\"hljs-string\">dbo<\/span>].[<span class=\"hljs-string\">GetReports<\/span>](<span class=\"hljs-link\">[e].[Id]<\/span>) AS [g]\r\nWHERE [g].[IsDeveloper] = CAST(1 AS bit)\r\n<\/code><\/pre>\n<p>Notice that the SQL is rooted in the <code>Employees<\/code> table, calls <code>GetReports<\/code>, and then adds an additional WHERE clause on the results of the function.<\/p>\n<h3 id=\"flexible-query-update-mapping\">Flexible query\/update mapping<\/h3>\n<p>EF Core 5.0 allows mapping the same entity type to different database objects. These objects may be tables, views, or functions.<\/p>\n<p>For example, an entity type can be mapped to both a database view and a database table:<\/p>\n<pre><code class=\"lang-c#\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">protected<\/span> <span class=\"hljs-keyword\">override<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">OnModelCreating<\/span>(<span class=\"hljs-params\">ModelBuilder modelBuilder<\/span>)\r\n<\/span>{\r\n    modelBuilder\r\n        .Entity&lt;Blog&gt;()\r\n        .ToTable(<span class=\"hljs-string\">\"Blogs\"<\/span>)\r\n        .ToView(<span class=\"hljs-string\">\"BlogsView\"<\/span>);\r\n}\r\n<\/code><\/pre>\n<p>By default, EF Core will then query from the view and send updates to the table. For example, executing the following code:<\/p>\n<pre><code class=\"lang-c#\">var <span class=\"hljs-keyword\">blog <\/span>= <span class=\"hljs-built_in\">context<\/span><span class=\"hljs-meta\">.Set<\/span>&lt;<span class=\"hljs-keyword\">Blog&gt;().Single(e <\/span>=&gt; e.Name == <span class=\"hljs-string\">\"One Unicorn\"<\/span>)<span class=\"hljs-comment\">;<\/span>\r\n\r\n<span class=\"hljs-keyword\">blog.Name <\/span>= <span class=\"hljs-string\">\"1unicorn2\"<\/span><span class=\"hljs-comment\">;<\/span>\r\n\r\n<span class=\"hljs-built_in\">context<\/span>.SaveChanges()<span class=\"hljs-comment\">;<\/span>\r\n<\/code><\/pre>\n<p>Results in a query against the view, and then an update to the table:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">SELECT<\/span> TOP(<span class=\"hljs-number\">2<\/span>) [b].[<span class=\"hljs-keyword\">Id<\/span>], [b].[<span class=\"hljs-keyword\">Name<\/span>], [b].[<span class=\"hljs-keyword\">Url<\/span>]\r\n<span class=\"hljs-keyword\">FROM<\/span> [BlogsView] <span class=\"hljs-keyword\">AS<\/span> [b]\r\n<span class=\"hljs-keyword\">WHERE<\/span> [b].[<span class=\"hljs-keyword\">Name<\/span>] = N<span class=\"hljs-string\">'One Unicorn'<\/span>\r\n\r\n<span class=\"hljs-keyword\">SET<\/span> NOCOUNT <span class=\"hljs-keyword\">ON<\/span>;\r\n<span class=\"hljs-keyword\">UPDATE<\/span> [Blogs] <span class=\"hljs-keyword\">SET<\/span> [<span class=\"hljs-keyword\">Name<\/span>] = @p0\r\n<span class=\"hljs-keyword\">WHERE<\/span> [<span class=\"hljs-keyword\">Id<\/span>] = @p1;\r\n<span class=\"hljs-keyword\">SELECT<\/span> @@ROWCOUNT;\r\n<\/code><\/pre>\n<h3 id=\"context-wide-split-query-configuration\">Context-wide split-query configuration<\/h3>\n<p>Split queries (see below) can now be configured as the default for any query executed by the DbContext. This configuration is only available for relational providers, and so must be specified as part of the <code>UseProvider<\/code> configuration. For example:<\/p>\n<pre><code class=\"lang-c#\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">protected<\/span> <span class=\"hljs-keyword\">override<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">OnConfiguring<\/span>(<span class=\"hljs-params\">DbContextOptionsBuilder optionsBuilder<\/span>)\r\n    <\/span>=&gt; optionsBuilder\r\n        .UseSqlServer(\r\n            Your.SqlServerConnectionString,\r\n            b =&gt; b.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery));\r\n<\/code><\/pre>\n<p>Documentation is tracked by issue <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/issues\/2479\">#2479<\/a>.<\/p>\n<h3 id=\"physicaladdress-mapping\">PhysicalAddress 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.networkinformation.physicaladdress\">PhysicalAddress class<\/a> is now automatically mapped to a string column for databases that do not already have native support. For more information, see the examples for <code>IPAddress<\/code> below.<\/p>\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=\"contribute-to-net-5\">Contribute to .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<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<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\/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<td>&nbsp;<\/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>\n<a href=\"https:\/\/github.com\/divega\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/08\/contributor_divega.png\" alt=\"divega\" width=\"220px\" \/><br\/>Diego Vega\n<\/a><\/td>\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=\"220px\" \/><br\/>\nlajones<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\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><a href=\"https:\/\/github.com\/jonlouie\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/07\/contributor_jonlouie.jpg\" alt=\"jonlouie\" width=\"200px\" \/>\nJon Louie<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/mohsinnasir\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/07\/contributor_mohsinnasir.jpg\" alt=\"mohsinnasir\" width=\"200px\" \/>\nMohsin Nasir<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/seekingtheoptimal\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/07\/contributor_seekingtheoptimal.jpg\" alt=\"seekingtheoptimal\" width=\"200px\" \/>\nB\u00e1lint Szab\u00f3<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/MartinBP\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/07\/contributor_MartinBP.png\" alt=\"MartinBP\" width=\"200px\" \/>\nMartin Boye Petersen<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/Ropouser\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/07\/contributor_ropouser.png\" alt=\"Ropouser\" width=\"200px\" \/>\nDuje \u0110akovi\u0107<\/a>&lt; \/td&gt;<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/codemillmatt\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/07\/contributor_codemillmatt.jpg\" alt=\"codemillmatt\" width=\"200px\" \/>\nMatt Soucoup<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/shahabganji\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/07\/contributor_shahabganji.jpg\" alt=\"shahabganji\" width=\"200px\" \/>\nSaeed Ganji<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/AshkanAbd\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/07\/contributor_AshkanAbd.png\" alt=\"AshkanAbd\" width=\"200px\" \/>\nAshkan Abd<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/ChristopherHaws\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/08\/contributor_christopherhaws.png\" alt=\"ChristopherHaws\" width=\"200px\" \/>\nChristopher Haws<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/SergerGood\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/08\/contributor_SergerGood.jpg\" alt=\"SergerGood\" width=\"200px\" \/>\nSergei Khlebnikov<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/KaloyanIT\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/08\/contributor_KaloyanIT.jpg\" alt=\"KaloyanIT\" width=\"200px\" \/>\nKaloyan Kostov<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/bide45\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/08\/contributor_bide45.png\" alt=\"bide45\" width=\"200px\" \/>\nbide45<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/jsportaro\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/08\/contributor_jsportaro.png\" alt=\"jsportaro\" width=\"200px\" \/>\nJoseph Portaro<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/mikewodarczyk\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/08\/contributor_mikewodarczyk.png\" alt=\"mikewodarczyk\" width=\"200px\" \/>\nMike Wodarczyk<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/jeffsvajlenko\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/08\/contributor_jeffsvajlenko.jpg\" alt=\"jeffsvajlenko\" width=\"200px\" \/>\nJeffrey Svajlenko<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/vanillajonathan\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/08\/contributor_vanillajonathan.png\" alt=\"vanillajonathan\" width=\"200px\" \/>\nJonathan<\/a><\/td>\n<td><a href=\"https:\/\/github.com\/m4ss1m0g\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/08\/contributor_m4ss1m0g.png\" alt=\"m4ss1m0g\" width=\"200px\" \/>\nMassimo Giambona<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/Psypher9\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2020\/08\/contributor_Psypher9.png\" alt=\"Psypher9\" width=\"200px\" \/>\nTurner Bass<\/a><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>Entity Framework Core EF Core 5.0 Preview 8 is here with Table-per-type (TPT), table-valued functions support, SQLite table rebuilds for migrations and more.<\/p>\n","protected":false},"author":368,"featured_media":29421,"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-29420","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>Entity Framework Core EF Core 5.0 Preview 8 is here with Table-per-type (TPT), table-valued functions support, SQLite table rebuilds for migrations and more.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/29420","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=29420"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/29420\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media\/29421"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media?parent=29420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=29420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=29420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}