{"id":31871,"date":"2021-02-17T11:30:08","date_gmt":"2021-02-17T18:30:08","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/dotnet\/?p=31871"},"modified":"2021-02-18T09:52:09","modified_gmt":"2021-02-18T16:52:09","slug":"announcing-entity-framework-core-6-0-preview-1","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/announcing-entity-framework-core-6-0-preview-1\/","title":{"rendered":"Announcing Entity Framework Core 6.0 Preview 1"},"content":{"rendered":"<p>Today, the Entity Framework Core team announces the first preview release of\n<a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore\/6.0.0-preview.1.21102.2\">EF Core 6.0<\/a>.\nThis release includes new attributes, built-in functions, and database-specific improvements to SQLite and SQL Server capabilities.<\/p>\n<h2 id=\"prerequisites\">Prerequisites<\/h2>\n<ul>\n<li>EF Core 6.0 currently targets .NET 5. This will likely be updated to .NET 6 as we near the release. EF Core 6.0 does not target any .NET Standard version; for more information see <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/the-future-of-net-standard\/\">the future of .NET Standard<\/a>.<\/li>\n<li>EF Core 6.0 will not run on .NET Framework.<\/li>\n<\/ul>\n<hr \/>\n<h2 id=\"how-to-get-ef-core-6-0-previews\">How to get EF Core 6.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> 6<span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.0-preview<\/span><span class=\"hljs-selector-class\">.1<\/span><span class=\"hljs-selector-class\">.21102<\/span><span class=\"hljs-selector-class\">.2<\/span>\r\n<\/code><\/pre>\n<p>This following table links to the preview 1 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\/6.0.0-preview.1.21102.2\">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\/6.0.0-preview.1.21102.2\">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\/6.0.0-preview.1.21102.2\">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\/6.0.0-preview.1.21102.2\">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\/6.0.0-preview.1.21102.2\">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\/6.0.0-preview.1.21102.2\">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\/6.0.0-preview.1.21102.2\">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\/6.0.0-preview.1.21102.2\">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\/6.0.0-preview.1.21102.2\">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\/6.0.0-preview.1.21102.2\">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\/6.0.0-preview.1.21102.2\">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\/6.0.0-preview.1.21102.2\">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\/6.0.0-preview.1.21102.2\">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\/6.0.0-preview.1.21102.2\">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 6.0 preview 1 release of the <a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.Data.Sqlite.Core\/6.0.0-preview.1.21102.2\">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,\nyou&#8217;ll have to install this package as either a global or local tool.<\/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-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> 6<span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.0-preview<\/span><span class=\"hljs-selector-class\">.1<\/span><span class=\"hljs-selector-class\">.21102<\/span><span class=\"hljs-selector-class\">.2<\/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-6-preview-1\">What&#8217;s New in EF Core 6 Preview 1<\/h2>\n<p>We maintain documentation covering <a href=\"https:\/\/docs.microsoft.com\/ef\/core\/what-is-new\/ef-core-6.0\/whatsnew\">new features introduced into each preview<\/a>.<\/p>\n<p>Some of the highlights from preview 1 are called out below. This preview also includes several bug fixes.<\/p>\n<blockquote><p><strong>TIP<\/strong>\nYou can run and debug into all the preview 1 samples shown below by <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/tree\/master\/samples\/core\/Miscellaneous\/NewInEFCore6\">downloading the sample code from GitHub<\/a>.<\/p><\/blockquote>\n<h3 id=\"unicodeattribute\">UnicodeAttribute<\/h3>\n<p>GitHub Issue: <a href=\"https:\/\/github.com\/dotnet\/efcore\/issues\/19794\">#19794<\/a>. This feature was contributed by <a href=\"https:\/\/github.com\/RaymondHuy\">@RaymondHuy<\/a>.<\/p>\n<p>Starting with EF Core 6.0, a string property can now be mapped to a non-Unicode column using a mapping attribute <em>without specifying the database type directly<\/em>. For example, consider a <code>Book<\/code> entity type with a property for the <a href=\"https:\/\/en.wikipedia.org\/wiki\/International_Standard_Book_Number\">International Standard Book Number (ISBN)<\/a> in the form &#8220;ISBN 978-3-16-148410-0&#8221;:<\/p>\n<pre><code class=\"lang-csharp\">    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Book<\/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> Title { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n\r\n        [Unicode(<span class=\"hljs-literal\">false<\/span>)]\r\n        [MaxLength(<span class=\"hljs-number\">22<\/span>)]\r\n        <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Isbn { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    }\r\n<\/code><\/pre>\n<p>Since ISBNs cannot contain any non-unicode characters, the <code>Unicode<\/code> attribute will cause a non-Unicode string type to be used. In addition, <code>MaxLength<\/code> is used to limit the size of the database column. For example, when using SQL Server, this results in a database column of <code>varchar(22)<\/code>:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">CREATE<\/span> <span class=\"hljs-keyword\">TABLE<\/span> [Book] (\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    [Title] <span class=\"hljs-keyword\">nvarchar<\/span>(<span class=\"hljs-keyword\">max<\/span>) <span class=\"hljs-literal\">NULL<\/span>,\r\n    [Isbn] <span class=\"hljs-built_in\">varchar<\/span>(<span class=\"hljs-number\">22<\/span>) <span class=\"hljs-literal\">NULL<\/span>,\r\n    <span class=\"hljs-keyword\">CONSTRAINT<\/span> [PK_Book] PRIMARY <span class=\"hljs-keyword\">KEY<\/span> ([<span class=\"hljs-keyword\">Id<\/span>]));\r\n<\/code><\/pre>\n<blockquote><p><strong>NOTE<\/strong>\nEF Core maps string properties to Unicode columns by default. <code>UnicodeAttribute<\/code> is ignored when the database system supports only Unicode types.<\/p><\/blockquote>\n<h3 id=\"precisionattribute\">PrecisionAttribute<\/h3>\n<p>GitHub Issue: <a href=\"https:\/\/github.com\/dotnet\/efcore\/issues\/17914\">#17914<\/a>. This feature was contributed by <a href=\"https:\/\/github.com\/RaymondHuy\">@RaymondHuy<\/a>.<\/p>\n<p>The precision and scale of a database column can now be configured using mapping attributes <em>without specifying the database type directly<\/em>. For example, consider a <code>Product<\/code> entity type with a decimal <code>Price<\/code> property:<\/p>\n<pre><code class=\"lang-csharp\">    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Product<\/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        [Precision(precision: <span class=\"hljs-number\">10<\/span>, scale: <span class=\"hljs-number\">2<\/span>)]\r\n        <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">decimal<\/span> Price { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    }\r\n<\/code><\/pre>\n<p>EF Core will map this property to a database column with precision 10 and scale 2. For example, on SQL Server:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">CREATE<\/span> <span class=\"hljs-keyword\">TABLE<\/span> [Product] (\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    [Price] <span class=\"hljs-built_in\">decimal<\/span>(<span class=\"hljs-number\">10<\/span>,<span class=\"hljs-number\">2<\/span>) <span class=\"hljs-keyword\">NOT<\/span> <span class=\"hljs-literal\">NULL<\/span>,\r\n    <span class=\"hljs-keyword\">CONSTRAINT<\/span> [PK_Product] PRIMARY <span class=\"hljs-keyword\">KEY<\/span> ([<span class=\"hljs-keyword\">Id<\/span>]));\r\n<\/code><\/pre>\n<h3 id=\"entitytypeconfigurationattribute\">EntityTypeConfigurationAttribute<\/h3>\n<p>GitHub Issue: <a href=\"https:\/\/github.com\/dotnet\/efcore\/issues\/23163\">#23163<\/a>. This feature was contributed by <a href=\"https:\/\/github.com\/KaloyanIT\">@KaloyanIT<\/a>.<\/p>\n<p><code>IEntityTypeConfiguration<\/code> instances allow <code>ModelBuilder<\/code> configuration for a each entity type to be contained in its own configuration class. For example:<\/p>\n<pre><code class=\"lang-csharp\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">BookConfiguration<\/span> : <span class=\"hljs-title\">IEntityTypeConfiguration<\/span>&lt;<span class=\"hljs-title\">Book<\/span>&gt;\r\n<\/span>{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> Configure(EntityTypeBuilder&lt;Book&gt; builder)\r\n    {\r\n        builder\r\n            .Property(e =&gt; e.Isbn)\r\n            .IsUnicode(<span class=\"hljs-literal\">false<\/span>)\r\n            .HasMaxLength(<span class=\"hljs-number\">22<\/span>);\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>Normally, this configuration class must be instantiated and called into from <code>OnModelCreating<\/code>. For example:<\/p>\n<pre><code class=\"lang-csharp\"><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    <span class=\"hljs-keyword\">new<\/span> BookConfiguration().Configure(modelBuilder.Entity&lt;Book&gt;());\r\n}\r\n<\/code><\/pre>\n<p>Starting with EF Core 6.0, an <code>EntityTypeConfigurationAttribute<\/code> can be placed on the entity type such that EF Core can find and use appropriate configuration. For example:<\/p>\n<pre><code class=\"lang-csharp\">[EntityTypeConfiguration(<span class=\"hljs-keyword\">typeof<\/span>(BookConfiguration))]\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Book<\/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> Title { <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> Isbn { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n<\/code><\/pre>\n<p>This attribute means that EF Core will use the specified <code>IEntityTypeConfiguration<\/code> implementation whenever the <code>Book<\/code> entity type is included in a model. The entity type is included in a model using one of the normal mechanisms. For example, by creating a <code>DbSet<\/code> property for the entity type:<\/p>\n<pre><code class=\"lang-csharp\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">BooksContext<\/span> : <span class=\"hljs-type\">DbContext<\/span><\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> DbSet&lt;Book&gt; Books { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n\r\n    <span class=\"hljs-comment\">\/\/...<\/span>\r\n<\/code><\/pre>\n<p>Or by registering it in <code>OnModelCreating<\/code>:<\/p>\n<pre><code class=\"lang-csharp\"><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.Entity&lt;Book&gt;();\r\n}\r\n<\/code><\/pre>\n<blockquote><p><strong>NOTE<\/strong>\n<code>EntityTypeConfigurationAttribute<\/code> types will not be automatically discovered in an assembly. Entity types must be added to the model before the attribute will be discovered on that entity type.<\/p><\/blockquote>\n<h3 id=\"translate-tostring-on-sqlite\">Translate ToString on SQLite<\/h3>\n<p>GitHub Issue: <a href=\"https:\/\/github.com\/dotnet\/efcore\/issues\/17223\">#17223<\/a>. This feature was contributed by <a href=\"https:\/\/github.com\/ralmsdeveloper\">@ralmsdeveloper<\/a>.<\/p>\n<p>Calls to <code>ToString<\/code> are now translated to SQL when using the SQLite database provider. This can be useful for text searches involving non-string columns. For example, consider a <code>User<\/code> entity type that stores phone numbers as numeric values:<\/p>\n<pre><code class=\"lang-csharp\">    <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        <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Username { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n        <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">long<\/span> PhoneNumber { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    }\r\n<\/code><\/pre>\n<p><code>ToString<\/code> can be used to convert the number to a string in the database. We can then use this string with a function such as <code>LIKE<\/code> to find numbers that match a pattern. For example, to find all numbers containing 555:<\/p>\n<pre><code class=\"lang-csharp\"><span class=\"hljs-keyword\">var<\/span> users = context.Users.Where(<span class=\"hljs-function\"><span class=\"hljs-params\">u<\/span> =&gt;<\/span> EF.Functions.Like(u.PhoneNumber.ToString(), <span class=\"hljs-string\">\"%555%\"<\/span>)).ToList();\r\n<\/code><\/pre>\n<p>This translates to the following SQL when using a SQLite database:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">SELECT<\/span> <span class=\"hljs-keyword\">COUNT<\/span>(*)\r\n<span class=\"hljs-keyword\">FROM<\/span> <span class=\"hljs-string\">\"Users\"<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-string\">\"u\"<\/span>\r\n<span class=\"hljs-keyword\">WHERE<\/span> <span class=\"hljs-keyword\">CAST<\/span>(<span class=\"hljs-string\">\"u\"<\/span>.<span class=\"hljs-string\">\"PhoneNumber\"<\/span> <span class=\"hljs-keyword\">AS<\/span> <span class=\"hljs-built_in\">TEXT<\/span>) <span class=\"hljs-keyword\">LIKE<\/span> <span class=\"hljs-string\">'%555%'<\/span>\r\n<\/code><\/pre>\n<p>Note that translation of <code>ToString<\/code> for SQL Server is already supported in EF Core 5.0, and may also be supported by other database providers.<\/p>\n<h3 id=\"ef-functions-random\">EF.Functions.Random<\/h3>\n<p>GitHub Issue: <a href=\"https:\/\/github.com\/dotnet\/efcore\/issues\/16141\">#16141<\/a>. This feature was contributed by <a href=\"https:\/\/github.com\/RaymondHuy\">@RaymondHuy<\/a>.<\/p>\n<p><code>EF.Functions.Random<\/code> maps to a database function returning a pseudo-random number between 0 and 1 exclusive. Translations have been implemented in the EF Core repo for SQL Server, SQLite, and Cosmos. For example, consider a <code>User<\/code> entity type with a <code>Popularity<\/code> property:<\/p>\n<pre><code class=\"lang-csharp\">    <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        <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Username { <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> Popularity { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    }\r\n<\/code><\/pre>\n<p><code>Popularity<\/code> can have values from 1 to 5 inclusive. Using <code>EF.Functions.Random<\/code> we can write a query to return all users with a randomly chosen popularity:<\/p>\n<pre><code class=\"lang-csharp\"><span class=\"hljs-keyword\">var<\/span> users = context.Users.Where(u =&gt; u.Popularity == (<span class=\"hljs-built_in\">int<\/span>)(EF.Functions.Random() * <span class=\"hljs-number\">5.0<\/span>) + <span class=\"hljs-number\">1<\/span>).ToList();\r\n<\/code><\/pre>\n<p>This translates to the following SQL when using a SQL Server database:<\/p>\n<pre><code class=\"lang-sql\">SELECT <span class=\"hljs-string\">[u]<\/span>.<span class=\"hljs-string\">[Id]<\/span>, <span class=\"hljs-string\">[u]<\/span>.<span class=\"hljs-string\">[Popularity]<\/span>, <span class=\"hljs-string\">[u]<\/span>.<span class=\"hljs-string\">[Username]<\/span>\r\nFROM <span class=\"hljs-string\">[Users]<\/span> AS <span class=\"hljs-string\">[u]<\/span>\r\nWHERE <span class=\"hljs-string\">[u]<\/span>.<span class=\"hljs-string\">[Popularity]<\/span> = (CAST((RAND() * <span class=\"hljs-number\">5<\/span>.0E0) AS int) + <span class=\"hljs-number\">1<\/span>)\r\n<\/code><\/pre>\n<h3 id=\"support-for-sql-server-sparse-columns\">Support for SQL Server sparse columns<\/h3>\n<p>GitHub Issue: <a href=\"https:\/\/github.com\/dotnet\/efcore\/issues\/8023\">#8023<\/a>.<\/p>\n<p>SQL Server <a href=\"https:\/\/docs.microsoft.com\/sql\/relational-databases\/tables\/use-sparse-columns\">sparse columns<\/a> are ordinary columns that are optimized to store null values. This can be useful when using <a href=\"https:\/\/docs.microsoft.com\/ef\/core\/modeling\/inheritance\">TPH inheritance mapping<\/a> where properties of a rarely used subtype will result in null column values for most rows in the table. For example, consider a <code>ForumModerator<\/code> class that extends from <code>ForumUser<\/code>:<\/p>\n<pre><code class=\"lang-csharp\">    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ForumUser<\/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> Username { <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\">ForumModerator<\/span> : <span class=\"hljs-title\">ForumUser<\/span>\r\n    {\r\n        <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> ForumName { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    }\r\n<\/code><\/pre>\n<p>There may be millions of users, with only a handful of these being moderators. This means mapping the <code>ForumName<\/code> as sparse might make sense here. This can now be configured using <code>IsSparse<\/code> in <code>OnModelCreating<\/code>. For example:<\/p>\n<pre><code class=\"lang-csharp\">        <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;ForumModerator&gt;()\r\n                .Property(e =&gt; e.ForumName)\r\n                .IsSparse();\r\n        }\r\n<\/code><\/pre>\n<p>EF Core migrations will then mark the column as sparse. For example:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">CREATE<\/span> <span class=\"hljs-keyword\">TABLE<\/span> [ForumUser] (\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    [Username] <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    [ForumName] <span class=\"hljs-keyword\">nvarchar<\/span>(<span class=\"hljs-keyword\">max<\/span>) <span class=\"hljs-keyword\">SPARSE<\/span> <span class=\"hljs-literal\">NULL<\/span>,\r\n    <span class=\"hljs-keyword\">CONSTRAINT<\/span> [PK_ForumUser] PRIMARY <span class=\"hljs-keyword\">KEY<\/span> ([<span class=\"hljs-keyword\">Id<\/span>]));\r\n<\/code><\/pre>\n<blockquote><p><strong>NOTE<\/strong>\nSparse columns have limitations. Make sure to read the <a href=\"https:\/\/docs.microsoft.com\/sql\/relational-databases\/tables\/use-sparse-columns\">SQL Server sparse columns documentation<\/a> to ensure that sparse columns are the right choice for your scenario.<\/p><\/blockquote>\n<h3 id=\"in-memory-database-validate-required-properties-are-not-null\">In-memory database: validate required properties are not null<\/h3>\n<p>GitHub Issue: <a href=\"https:\/\/github.com\/dotnet\/efcore\/issues\/10613\">#10613<\/a>. This feature was contributed by <a href=\"https:\/\/github.com\/fagnercarvalho\">@fagnercarvalho<\/a>.<\/p>\n<p>The EF Core in-memory database will now throw an exception if an attempt is made to save a null value for a property marked as required. For example, consider a <code>User<\/code> type with a required <code>Username<\/code> property:<\/p>\n<pre><code class=\"lang-csharp\">    <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        [Required]\r\n        <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Username { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    }\r\n<\/code><\/pre>\n<p>Attempting to save an entity with a null <code>Username<\/code> will result in the following exception:<\/p>\n<blockquote><p>Microsoft.EntityFrameworkCore.DbUpdateException: Required properties &#8216;{&#8216;Username&#8217;}&#8217; are missing for the instance of entity type &#8216;User&#8217; with the key value &#8216;{Id: 1}&#8217;.<\/p><\/blockquote>\n<p>This validation can be disabled if necessary. For example:<\/p>\n<pre><code class=\"lang-csharp\">        <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>{\r\n            optionsBuilder\r\n                .LogTo(Console.WriteLine, <span class=\"hljs-keyword\">new<\/span>[] { InMemoryEventId.ChangesSaved })\r\n                .UseInMemoryDatabase(<span class=\"hljs-string\">\"UserContextWithNullCheckingDisabled\"<\/span>)\r\n                .EnableNullabilityCheck(<span class=\"hljs-literal\">false<\/span>);\r\n        }\r\n<\/code><\/pre>\n<h3 id=\"improved-sql-server-translation-for-isnullorwhitespace\">Improved SQL Server translation for IsNullOrWhitespace<\/h3>\n<p>GitHub Issue: <a href=\"https:\/\/github.com\/dotnet\/efcore\/issues\/22916\">#22916<\/a>. This feature was contributed by <a href=\"https:\/\/github.com\/Marusyk\">@Marusyk<\/a>.<\/p>\n<p>Consider the following query:<\/p>\n<pre><code class=\"lang-csharp\">        <span class=\"hljs-built_in\">var<\/span> users = context.Users.<span class=\"hljs-keyword\">Where<\/span>(\r\n            e =&gt; <span class=\"hljs-built_in\">string<\/span>.IsNullOrWhiteSpace(e.FirstName)\r\n                 || <span class=\"hljs-built_in\">string<\/span>.IsNullOrWhiteSpace(e.LastName)).ToList();\r\n<\/code><\/pre>\n<p>Before EF Core 6.0, this was translated to the following on SQL Server:<\/p>\n<pre><code class=\"lang-sql\"><span class=\"hljs-keyword\">SELECT<\/span> [u].[<span class=\"hljs-keyword\">Id<\/span>], [u].[FirstName], [u].[LastName]\r\n<span class=\"hljs-keyword\">FROM<\/span> [<span class=\"hljs-keyword\">Users<\/span>] <span class=\"hljs-keyword\">AS<\/span> [u]\r\n<span class=\"hljs-keyword\">WHERE<\/span> ([u].[FirstName] <span class=\"hljs-keyword\">IS<\/span> <span class=\"hljs-literal\">NULL<\/span> <span class=\"hljs-keyword\">OR<\/span> (<span class=\"hljs-keyword\">LTRIM<\/span>(<span class=\"hljs-keyword\">RTRIM<\/span>([u].[FirstName])) = N<span class=\"hljs-string\">''<\/span>)) <span class=\"hljs-keyword\">OR<\/span> ([u].[LastName] <span class=\"hljs-keyword\">IS<\/span> <span class=\"hljs-literal\">NULL<\/span> <span class=\"hljs-keyword\">OR<\/span> (<span class=\"hljs-keyword\">LTRIM<\/span>(<span class=\"hljs-keyword\">RTRIM<\/span>([u].[LastName])) = N<span class=\"hljs-string\">''<\/span>))\r\n<\/code><\/pre>\n<p>This translation has been improved for EF Core 6.0 to:<\/p>\n<pre><code class=\"lang-sql\">SELECT <span class=\"hljs-comment\">[u]<\/span>.<span class=\"hljs-comment\">[Id]<\/span>, <span class=\"hljs-comment\">[u]<\/span>.<span class=\"hljs-comment\">[FirstName]<\/span>, <span class=\"hljs-comment\">[u]<\/span>.<span class=\"hljs-comment\">[LastName]<\/span>\r\nFROM <span class=\"hljs-comment\">[Users]<\/span> AS <span class=\"hljs-comment\">[u]<\/span>\r\nWHERE (<span class=\"hljs-comment\">[u]<\/span>.<span class=\"hljs-comment\">[FirstName]<\/span> <span class=\"hljs-keyword\">IS<\/span> NULL OR (<span class=\"hljs-comment\">[u]<\/span>.<span class=\"hljs-comment\">[FirstName]<\/span> = N'')) OR (<span class=\"hljs-comment\">[u]<\/span>.<span class=\"hljs-comment\">[LastName]<\/span> <span class=\"hljs-keyword\">IS<\/span> NULL OR (<span class=\"hljs-comment\">[u]<\/span>.<span class=\"hljs-comment\">[LastName]<\/span> = N''))\r\n<\/code><\/pre>\n<h3 id=\"database-comments-are-scaffolded-to-code-comments\">Database comments are scaffolded to code comments<\/h3>\n<p>GitHub Issue: <a href=\"https:\/\/github.com\/dotnet\/efcore\/issues\/19113\">#19113<\/a>. This feature was contributed by <a href=\"https:\/\/github.com\/ErikEJ\">@ErikEJ<\/a>.<\/p>\n<p>Comments on SQL tables and columns are now scaffolded into the entity types created when <a href=\"https:\/\/docs.microsoft.com\/ef\/core\/managing-schemas\/scaffolding\">reverse-engineering an EF Core model<\/a> from an existing SQL Server database. For example:<\/p>\n<pre><code class=\"lang-csharp\"><span class=\"hljs-comment\"><span class=\"hljs-doctag\">\/\/\/<\/span> <span class=\"hljs-doctag\">&lt;summary&gt;<\/span><\/span>\r\n<span class=\"hljs-comment\"><span class=\"hljs-doctag\">\/\/\/<\/span> The Blog table.<\/span>\r\n<span class=\"hljs-comment\"><span class=\"hljs-doctag\">\/\/\/<\/span> <span class=\"hljs-doctag\">&lt;\/summary&gt;<\/span><\/span>\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">partial<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Blog<\/span>\r\n{\r\n    <span class=\"hljs-comment\"><span class=\"hljs-doctag\">\/\/\/<\/span> <span class=\"hljs-doctag\">&lt;summary&gt;<\/span><\/span>\r\n    <span class=\"hljs-comment\"><span class=\"hljs-doctag\">\/\/\/<\/span> The primary key.<\/span>\r\n    <span class=\"hljs-comment\"><span class=\"hljs-doctag\">\/\/\/<\/span> <span class=\"hljs-doctag\">&lt;\/summary&gt;<\/span><\/span>\r\n    [Key]\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<\/code><\/pre>\n<h2 id=\"microsoft-data-sqlite-6-0-preview-1\">Microsoft.Data.Sqlite 6.0 Preview 1<\/h2>\n<blockquote><p><strong>TIP<\/strong>\nYou can run and debug into all the preview 1 samples shown below by <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/tree\/master\/samples\/core\/Miscellaneous\/NewInEFCore6\">downloading the sample code from GitHub<\/a>.<\/p><\/blockquote>\n<h3 id=\"savepoints-api\">Savepoints API<\/h3>\n<p>GitHub Issue: <a href=\"https:\/\/github.com\/dotnet\/efcore\/issues\/20228\">#20228<\/a>.<\/p>\n<p>We have been standardizing on <a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/33397\">a common API for savepoints in ADO.NET providers<\/a>. Microsoft.Data.Sqlite now supports this API, including:<\/p>\n<ul>\n<li><code>Save<\/code> to create a savepoint in the transaction<\/li>\n<li><code>Rollback<\/code> to roll back to a previous savepoint<\/li>\n<li><code>Release<\/code> to release a savepoint<\/li>\n<\/ul>\n<p>Using a savepoint allows part of a transaction to be rolled back without rolling back the entire transaction. For example, the code below:<\/p>\n<ul>\n<li>Creates a transaction<\/li>\n<li>Sends an update to the database<\/li>\n<li>Creates a savepoint<\/li>\n<li>Sends another update to the database<\/li>\n<li>Rolls back to the savepoint previous created<\/li>\n<li>Commits the transaction<\/li>\n<\/ul>\n<pre><code class=\"lang-csharp\">        <span class=\"hljs-keyword\">using<\/span> <span class=\"hljs-keyword\">var<\/span> connection = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-type\">SqliteConnection<\/span>(<span class=\"hljs-string\">\"DataSource=test.db\"<\/span>);\r\n        connection.Open();\r\n\r\n        <span class=\"hljs-keyword\">using<\/span> <span class=\"hljs-keyword\">var<\/span> transaction = connection.BeginTransaction();\r\n\r\n        <span class=\"hljs-keyword\">using<\/span> (<span class=\"hljs-keyword\">var<\/span> command = connection.CreateCommand())\r\n        {\r\n            command.CommandText = @<span class=\"hljs-string\">\"UPDATE Users SET Username = 'ajcvickers' WHERE Id = 1\"<\/span>;\r\n            command.ExecuteNonQuery();\r\n        }\r\n\r\n        transaction.Save(<span class=\"hljs-string\">\"MySavepoint\"<\/span>);\r\n\r\n        <span class=\"hljs-keyword\">using<\/span> (<span class=\"hljs-keyword\">var<\/span> command = connection.CreateCommand())\r\n        {\r\n            command.CommandText = @<span class=\"hljs-string\">\"UPDATE Users SET Username = 'wfvickers' WHERE Id = 2\"<\/span>;\r\n            command.ExecuteNonQuery();\r\n        }\r\n\r\n        transaction.Rollback(<span class=\"hljs-string\">\"MySavepoint\"<\/span>);\r\n\r\n        transaction.Commit();\r\n<\/code><\/pre>\n<p>This will result in the first update being committed to the database, while the second update is not committed since the savepoint was rolled back before committing the transaction.<\/p>\n<h3 id=\"command-timeout-in-the-connection-string\">Command timeout in the connection string<\/h3>\n<p>GitHub Issue: <a href=\"https:\/\/github.com\/dotnet\/efcore\/issues\/22505\">#22505<\/a>. This feature was contributed by <a href=\"https:\/\/github.com\/nmichels\">@nmichels<\/a>.<\/p>\n<p>ADO.NET providers support two distinct timeouts:<\/p>\n<ul>\n<li>The connection timeout, which determines the maximum time to wait when making a connection to the database.<\/li>\n<li>The command timeout, which determines the maximum time to wait for a command to complete executing.<\/li>\n<\/ul>\n<p>The command timeout can be set from code using &lt;xref:System.Data.Common.DbCommand.CommandTimeout?displayProperty=nameWithType&gt;. Many providers are now also exposing this command timeout in the connection string. Microsoft.Data.Sqlite is following this trend with the <code>Command Timeout<\/code> connection string keyword. For example, <code>\"Command Timeout=60;DataSource=test.db\"<\/code> will use 60 seconds as the default timeout for commands created by the connection.<\/p>\n<blockquote><p><strong>TIP<\/strong>\nSqlite treats <code>Default Timeout<\/code> as a synonym for <code>Command Timeout<\/code> and so can be used instead if preferred.<\/p><\/blockquote>\n<h2 id=\"daily-builds\">Daily builds<\/h2>\n<p>EF Core previews are aligned with .NET 6 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 require .NET 5.<\/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:\/\/aka.ms\/efstandups\">Watch our YouTube playlist<\/a> of previous shows<\/li>\n<li><a href=\"https:\/\/dotnet.microsoft.com\/platform\/community\/standup\">Visit the .NET Community Standup<\/a> page to preview upcoming shows<\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/efcore\/issues\/22700\">Suggest a guest or project, including your own<\/a> by commenting on the linked issue<\/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>EF Core Community Standup Playlist:\n<a href=\"https:\/\/aka.ms\/efstandups\">https:\/\/aka.ms\/efstandups<\/a><\/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<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><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h2><a id=\"user-content-thank-you-to-our-contributors\" class=\"anchor\" href=\"#thank-you-to-our-contributors\" aria-hidden=\"true\"><\/a>Thank you to our contributors!<\/h2>\n<table>\n<thead>\n<tr>\n<th align=\"center\"><\/th>\n<th align=\"center\"><\/th>\n<th align=\"center\"><\/th>\n<th align=\"center\"><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/Ali-YousefiTelori\">Ali-YousefiTelori<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/AndrewKitu\">AndrewKitu<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/ardalis\">ardalis<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/CaringDev\">CaringDev<\/a><\/strong><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/Ali-YousefiTelori\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/Ali-YousefiTelori.jpg\" alt=\"Ali-YousefiTelori\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/AndrewKitu\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/AndrewKitu.jpg\" alt=\"AndrewKitu\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/ardalis\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/ardalis.jpg\" alt=\"ardalis\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/CaringDev\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/CaringDev.png\" alt=\"CaringDev\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23946\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/3070\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/3091\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23585\">#1<\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/carlreinke\">carlreinke<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/cgrimes01\">cgrimes01<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/cincuranet\">cincuranet<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/dan-giddins\">dan-giddins<\/a><\/strong><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/carlreinke\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/carlreinke.png\" alt=\"carlreinke\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/cgrimes01\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/cgrimes01.png\" alt=\"cgrimes01\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/cincuranet\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/cincuranet.png\" alt=\"cincuranet\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dan-giddins\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/dan-giddins.png\" alt=\"dan-giddins\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23694\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/3038\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2714\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2910\">#1<\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/dennisseders\">dennisseders<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/DickBaker\">DickBaker<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/ErikEJ\">ErikEJ<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/fagnercarvalho\">fagnercarvalho<\/a><\/strong><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dennisseders\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/dennisseders.png\" alt=\"dennisseders\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/DickBaker\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/DickBaker.png\" alt=\"DickBaker\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/ErikEJ\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/ErikEJ.jpg\" alt=\"ErikEJ\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/fagnercarvalho\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/fagnercarvalho.jpg\" alt=\"fagnercarvalho\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2839\">#1<\/a>, <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2845\">#2<\/a>, <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2848\">#3<\/a>, <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2987\">#4<\/a>, <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2997\">#5<\/a>, <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/3007\">#6<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2990\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/22900\">#1<\/a>, <a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/22937\">#2<\/a>, <a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/22938\">#3<\/a>, <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2897\">#4<\/a>, <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2984\">#5<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23094\">#1<\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/filipnavara\">filipnavara<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/garyng\">garyng<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/Geoff1900\">Geoff1900<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/gfoidl\">gfoidl<\/a><\/strong><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/filipnavara\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/filipnavara.jpg\" alt=\"filipnavara\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/garyng\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/garyng.jpg\" alt=\"garyng\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/Geoff1900\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/Geoff1900.png\" alt=\"Geoff1900\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/gfoidl\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/gfoidl.jpg\" alt=\"gfoidl\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23591\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/3045\">#1<\/a>, <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/3046\">#2<\/a>, <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/3047\">#3<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/3025\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/22923\">#1<\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/gurustron\">gurustron<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/HSchwichtenberg\">HSchwichtenberg<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/jantlee\">jantlee<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/joaopgrassi\">joaopgrassi<\/a><\/strong><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/gurustron\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/gurustron.png\" alt=\"gurustron\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/HSchwichtenberg\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/HSchwichtenberg.jpg\" alt=\"HSchwichtenberg\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/jantlee\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/jantlee.jpg\" alt=\"jantlee\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/joaopgrassi\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/joaopgrassi.jpg\" alt=\"joaopgrassi\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/3010\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2894\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2786\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/22849\">#1<\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/josemiltonsampaio\">josemiltonsampaio<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/KaloyanIT\">KaloyanIT<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/khalidabuhakmeh\">khalidabuhakmeh<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/khellang\">khellang<\/a><\/strong><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/josemiltonsampaio\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/josemiltonsampaio.jpg\" alt=\"josemiltonsampaio\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/KaloyanIT\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/KaloyanIT.jpg\" alt=\"KaloyanIT\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/khalidabuhakmeh\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/khalidabuhakmeh.jpg\" alt=\"khalidabuhakmeh\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/khellang\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/khellang.png\" alt=\"khellang\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2927\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23563\">#1<\/a>, <a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23666\">#2<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2858\">#1<\/a>, <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2962\">#2<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2982\">#1<\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/koenbeuk\">koenbeuk<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/kotpal\">kotpal<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/leonardoporro\">leonardoporro<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/Marusyk\">Marusyk<\/a><\/strong><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/koenbeuk\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/koenbeuk.png\" alt=\"koenbeuk\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/kotpal\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/kotpal.jpg\" alt=\"kotpal\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/leonardoporro\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/leonardoporro.png\" alt=\"leonardoporro\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/Marusyk\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/Marusyk.jpg\" alt=\"Marusyk\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2921\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2763\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2883\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23039\">#1<\/a>, <a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/24016\">#2<\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/MaxG117\">MaxG117<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/mefateah\">mefateah<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/meggima\">meggima<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/msawczyn\">msawczyn<\/a><\/strong><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/MaxG117\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/MaxG117.png\" alt=\"MaxG117\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/mefateah\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/mefateah.png\" alt=\"mefateah\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/meggima\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/meggima.jpg\" alt=\"meggima\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/msawczyn\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/msawczyn.jpg\" alt=\"msawczyn\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2898\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/3065\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23605\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2917\">#1<\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/MSDN-WhiteKnight\">MSDN-WhiteKnight<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/natashanikolic\">natashanikolic<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/nmichels\">nmichels<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/nschonni\">nschonni<\/a><\/strong><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/MSDN-WhiteKnight\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/MSDN-WhiteKnight.png\" alt=\"MSDN-WhiteKnight\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/natashanikolic\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/natashanikolic.png\" alt=\"natashanikolic\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/nmichels\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/nmichels.jpg\" alt=\"nmichels\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/nschonni\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/nschonni.jpg\" alt=\"nschonni\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2887\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2920\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23091\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2775\">#1<\/a>, <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2776\">#2<\/a>, <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2779\">#3<\/a>, <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2780\">#4<\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/pkellner\">pkellner<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/ralmsdeveloper\">ralmsdeveloper<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/RaymondHuy\">RaymondHuy<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/Shirasho\">Shirasho<\/a><\/strong><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/pkellner\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/pkellner.jpg\" alt=\"pkellner\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/ralmsdeveloper\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/ralmsdeveloper.jpg\" alt=\"ralmsdeveloper\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/RaymondHuy\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/RaymondHuy.jpg\" alt=\"RaymondHuy\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/Shirasho\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/Shirasho.jpg\" alt=\"Shirasho\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2954\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/19473\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/22514\">#1<\/a>, <a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23145\">#2<\/a>, <a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23232\">#3<\/a>, <a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23424\">#4<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2988\">#1<\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/SimonCropp\">SimonCropp<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/the-wazz\">the-wazz<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/tkp1n\">tkp1n<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/Tomkaa\">Tomkaa<\/a><\/strong><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/SimonCropp\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/SimonCropp.jpg\" alt=\"SimonCropp\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/the-wazz\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/the-wazz.png\" alt=\"the-wazz\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/tkp1n\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/tkp1n.jpg\" alt=\"tkp1n\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/Tomkaa\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/Tomkaa.png\" alt=\"Tomkaa\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2957\">#1<\/a>, <a href=\"https:\/\/github.com\/dotnet\/EntityFramework.Docs\/pull\/2959\">#2<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23551\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23014\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23933\">#1<\/a><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<td align=\"center\"><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/umitkavala\">umitkavala<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/vincent1405\">vincent1405<\/a><\/strong><\/td>\n<td align=\"center\"><strong><a href=\"https:\/\/github.com\/wmeints\">wmeints<\/a><\/strong><\/td>\n<td align=\"center\"><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/umitkavala\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/umitkavala.jpg\" alt=\"umitkavala\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/vincent1405\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/vincent1405.png\" alt=\"vincent1405\" \/><\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/wmeints\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/02\/wmeints.jpg\" alt=\"wmeints\" \/><\/a><\/td>\n<td align=\"center\"><\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23322\">#1<\/a>, <a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23562\">#2<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/24020\">#1<\/a><\/td>\n<td align=\"center\"><a href=\"https:\/\/github.com\/dotnet\/efcore\/pull\/23873\">#1<\/a><\/td>\n<td align=\"center\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>Announcing the release of EF Core 6.0 Preview 1, the first preview of the new Entity Framework Core.<\/p>\n","protected":false},"author":368,"featured_media":31574,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[685,196,756,859],"tags":[4,9,70,71],"class_list":["post-31871","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-dotnet-core","category-csharp","category-entity-framework","tag-net","tag-net-core","tag-entity-framework","tag-entity-framework-core"],"acf":[],"blog_post_summary":"<p>Announcing the release of EF Core 6.0 Preview 1, the first preview of the new Entity Framework Core.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/31871","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=31871"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/31871\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media\/31574"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media?parent=31871"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=31871"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=31871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}