{"id":2290,"date":"2023-06-17T15:12:46","date_gmt":"2023-06-17T08:12:46","guid":{"rendered":"https:\/\/csharptutorial.net\/?page_id=2290"},"modified":"2023-06-17T15:19:55","modified_gmt":"2023-06-17T08:19:55","slug":"ef-core-views","status":"publish","type":"page","link":"https:\/\/www.csharptutorial.net\/entity-framework-core-tutorial\/ef-core-views\/","title":{"rendered":"How to Query Data from Database Views in EF Core"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you will learn how to create database views and query data from them in EF Core.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Creating and querying data from a database view in EF Core<\/h2>\n\n\n\n<p>To create and query data from a <a href=\"https:\/\/www.sqlservertutorial.net\/sql-server-views\/\" target=\"_blank\" rel=\"noreferrer noopener\">database view<\/a>, you follow these steps:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>First, define an entity class that has properties mapped to the columns of the views.<\/li>\n\n\n\n<li>Second, define a <code>DbSet<\/code> of the entity class in the <code>DbContext<\/code> class.<\/li>\n\n\n\n<li>Third, override the <code>OnModelCreating()<\/code> method to map the <code>DbSet<\/code> to the view.<\/li>\n\n\n\n<li>Fourth, create a new migration to manage a database view by running the <code>Add-Migration<\/code> command in the Package Console manager. In the generated migration class, implement the <code>Up()<\/code> method to create a view and <code>Down()<\/code> method to drop the view.<\/li>\n\n\n\n<li>Fifth, execute the <code>Update-Database<\/code> command in the Package Console Manager to create the view in the database<\/li>\n\n\n\n<li>Finally, query data from the view using the defined <code>DbSet<\/code>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Querying data from a data view example<\/h2>\n\n\n\n<p>We&#8217;ll use the <a href=\"https:\/\/csharptutorial.net\/entity-framework-core-tutorial\/ef-core-sample-project\/\">EF Core Sample Database<\/a> as the starting point. For demonstration purposes, we&#8217;ll create a view from the <code>Departments<\/code> and <code>Employees<\/code> tables:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/csharptutorial.net\/wp-content\/uploads\/2023\/06\/EF-Core-Departments-and-Emloyees-Tables.png\" alt=\"\" class=\"wp-image-2218\" width=\"439\" height=\"181\" srcset=\"https:\/\/www.csharptutorial.net\/wp-content\/uploads\/2023\/06\/EF-Core-Departments-and-Emloyees-Tables.png 585w, https:\/\/www.csharptutorial.net\/wp-content\/uploads\/2023\/06\/EF-Core-Departments-and-Emloyees-Tables-300x124.png 300w\" sizes=\"auto, (max-width: 439px) 100vw, 439px\" \/><\/figure>\n\n\n\n<p>First, define an entity class called <code>DepartmentSalary<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">DepartmentSalary<\/span>\n{\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>; }\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">decimal<\/span> TotalSalary { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Second, add the <code>DbSet<\/code> of the <code>DepartmentSalary<\/code> to the <code>HRContext<\/code> class:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">public<\/span> DbSet&lt;DepartmentSalary&gt; DepartmentSalaries { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Third, map the <code>DepartmentSalary<\/code> Entity to the database view:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><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>)<\/span>\n{\n    modelBuilder.Entity&lt;DepartmentSalary&gt;()\n                .HasNoKey()\n                .ToView(<span class=\"hljs-keyword\">nameof<\/span>(DepartmentSalaries));\n\n    <span class=\"hljs-keyword\">base<\/span>.OnModelCreating(modelBuilder);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Note that you use the name of the <code>DbSet&lt;DepartmentSalary&gt;<\/code>, which is the <code>DepartmentSalaries<\/code> property of the <code>HRContext<\/code> class. <\/p>\n\n\n\n<p>Since the view has no key, you need to call the <code>HasNoKey()<\/code> method to inform EF Core. Also, when you use <code>HasNoKey()<\/code> method, EF Core will not track the entities returned from the View.<\/p>\n\n\n\n<p>Fourth, create a new migration called <code>AddDepartmentSalaryView<\/code> using the Add-Command:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\">Add-Migration AddDepartmentSalaryView<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In the <code>AddDepartmentSalaryView<\/code> class, modify the <code>Up()<\/code> method to execute an SQL statement that <a href=\"https:\/\/www.sqlservertutorial.net\/sql-server-views\/sql-server-create-view\/\" target=\"_blank\" rel=\"noreferrer noopener\">creates the <code>DepartmentSalaries<\/code> view<\/a> and <code>Down()<\/code> method to <a href=\"https:\/\/www.sqlservertutorial.net\/sql-server-views\/sql-server-drop-view\/\" target=\"_blank\" rel=\"noreferrer noopener\">drop the view<\/a>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">using<\/span> Microsoft.EntityFrameworkCore.Migrations;\n\n<span class=\"hljs-keyword\">namespace<\/span> <span class=\"hljs-title\">HR.Migrations<\/span>;\n\n<span class=\"hljs-comment\"><span class=\"hljs-doctag\">\/\/\/<\/span> <span class=\"hljs-doctag\">&lt;inheritdoc \/&gt;<\/span><\/span>\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">partial<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">AddDepartmentSalaryView<\/span> : <span class=\"hljs-title\">Migration<\/span>\n{\n    <span class=\"hljs-comment\"><span class=\"hljs-doctag\">\/\/\/<\/span> <span class=\"hljs-doctag\">&lt;inheritdoc \/&gt;<\/span><\/span>\n    <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\">Up<\/span>(<span class=\"hljs-params\">MigrationBuilder migrationBuilder<\/span>)<\/span>\n    {\n\n        <span class=\"hljs-keyword\">var<\/span> command = <span class=\"hljs-string\">@\"CREATE VIEW DepartmentSalaries AS \n                                SELECT d.Name, SUM(e.Salary) TotalSalary\n\t                            FROM Departments D \n\t                            INNER JOIN Employees e ON e.DepartmentId = d.Id\n\t                            GROUP BY d.Name;\"<\/span>;\n        migrationBuilder.Sql(command);\n\n    }\n\n    <span class=\"hljs-comment\"><span class=\"hljs-doctag\">\/\/\/<\/span> <span class=\"hljs-doctag\">&lt;inheritdoc \/&gt;<\/span><\/span>\n    <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\">Down<\/span>(<span class=\"hljs-params\">MigrationBuilder migrationBuilder<\/span>)<\/span>\n    {\n        <span class=\"hljs-keyword\">var<\/span> command = <span class=\"hljs-string\">@\"DROP VIEW DepartmentSalaries;\"<\/span>;\n        migrationBuilder.Sql(command);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Fifth, run the <code>Update-Database<\/code> command to execute the migration which creates the <code>DepartmentSalaries<\/code> view in the database:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\">Update-Database<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>If you examine the database, you&#8217;ll see the <code>DepartmentSalaries<\/code> view has been created successfully as shown in the following picture:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"321\" height=\"228\" src=\"https:\/\/csharptutorial.net\/wp-content\/uploads\/2023\/06\/EF-Core-Database-Views.png\" alt=\"EF Core Database Views\" class=\"wp-image-2292\" srcset=\"https:\/\/www.csharptutorial.net\/wp-content\/uploads\/2023\/06\/EF-Core-Database-Views.png 321w, https:\/\/www.csharptutorial.net\/wp-content\/uploads\/2023\/06\/EF-Core-Database-Views-300x213.png 300w\" sizes=\"auto, (max-width: 321px) 100vw, 321px\" \/><\/figure>\n\n\n\n<p>Finally, modify the <code>Program.cs<\/code> file to query data from the <code>DepartmentSalaries<\/code> view. The following returns all rows from the view:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">using<\/span> HR;\n\n<span class=\"hljs-keyword\">using<\/span> <span class=\"hljs-keyword\">var<\/span> context = <span class=\"hljs-keyword\">new<\/span> HRContext();\n\n<span class=\"hljs-comment\">\/\/ get all departments from the view<\/span>\n<span class=\"hljs-keyword\">var<\/span> departmentSalaries = context.DepartmentSalaries.ToList();\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> ds <span class=\"hljs-keyword\">in<\/span> departmentSalaries)\n{\n    Console.WriteLine(<span class=\"hljs-string\">$\"<span class=\"hljs-subst\">{ds.Name}<\/span> - <span class=\"hljs-subst\">{ds.TotalSalary:C0}<\/span>\"<\/span>);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"plaintext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">Engineering - $1,819,531\nFinance - $2,085,811\nMarketing - $2,451,363\nOperations - $2,011,323\nSales - $2,044,996<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">plaintext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Behind the scenes, EF Core executes a query that selects data from the <code>DepartmentSalaries<\/code> view in the database:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"SQL (Structured Query Language)\" data-shcb-language-slug=\"sql\"><span><code class=\"hljs language-sql\"><span class=\"hljs-comment\">-- Executed DbCommand (26ms) &#91;Parameters=&#91;], CommandType='Text', CommandTimeout='30']<\/span>\n<span class=\"hljs-keyword\">SELECT<\/span> &#91;d].&#91;<span class=\"hljs-keyword\">Name<\/span>], &#91;d].&#91;TotalSalary]\n<span class=\"hljs-keyword\">FROM<\/span> &#91;DepartmentSalaries] <span class=\"hljs-keyword\">AS<\/span> &#91;d]<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">SQL (Structured Query Language)<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">sql<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Since the <code>DepartmentSalaries<\/code> is a <code>DbSet<\/code>, we can use other methods to query data. For example, the following selects departments whose total salary is greater than two million:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">using<\/span> HR;\n\n<span class=\"hljs-keyword\">using<\/span> <span class=\"hljs-keyword\">var<\/span> context = <span class=\"hljs-keyword\">new<\/span> HRContext();\n\n<span class=\"hljs-comment\">\/\/ get departments with salary more than 2 mils<\/span>\n<span class=\"hljs-keyword\">var<\/span> departmentSalaries = context.DepartmentSalaries\n                            .Where(ds =&gt; ds.TotalSalary &gt; <span class=\"hljs-number\">2<\/span>_000_000)\n                            .OrderBy(ds =&gt; ds.TotalSalary)\n                            .ToList();\n\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> ds <span class=\"hljs-keyword\">in<\/span> departmentSalaries)\n{\n    Console.WriteLine(<span class=\"hljs-string\">$\"<span class=\"hljs-subst\">{ds.Name}<\/span> - <span class=\"hljs-subst\">{ds.TotalSalary:C0}<\/span>\"<\/span>);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"plaintext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">Operations - $2,011,323\nSales - $2,044,996\nFinance - $2,085,811\nMarketing - $2,451,363<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">plaintext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>EF Core generates a <code>SELECt<\/code> statement with the <code>WHERE<\/code> and <code>ORDER<\/code> <code>BY<\/code> clauses to query data from the <code>DepartmentSalaries<\/code> view:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"SQL (Structured Query Language)\" data-shcb-language-slug=\"sql\"><span><code class=\"hljs language-sql\"><span class=\"hljs-comment\">-- Executed DbCommand (28ms) &#91;Parameters=&#91;], CommandType='Text', CommandTimeout='30']<\/span>\n<span class=\"hljs-keyword\">SELECT<\/span> &#91;d].&#91;<span class=\"hljs-keyword\">Name<\/span>], &#91;d].&#91;TotalSalary]\n<span class=\"hljs-keyword\">FROM<\/span> &#91;DepartmentSalaries] <span class=\"hljs-keyword\">AS<\/span> &#91;d]\n<span class=\"hljs-keyword\">WHERE<\/span> &#91;d].&#91;TotalSalary] &gt; <span class=\"hljs-number\">2000000.0<\/span>\n<span class=\"hljs-keyword\">ORDER<\/span> <span class=\"hljs-keyword\">BY<\/span> &#91;d].&#91;TotalSalary]<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">SQL (Structured Query Language)<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">sql<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use migrations to create and drop database views.<\/li>\n\n\n\n<li>Create an entity, <code>DbSet<\/code>, and map the <code>DbSet<\/code> to the view to query data from it.<\/li>\n<\/ul>\n<div class=\"helpful-block-content\" data-title=\"\">\n\t<header>\n\t\t<div class=\"wth-question\">Was this tutorial helpful ?<\/div>\n\t\t<div class=\"wth-thumbs\">\n\t\t\t<button\n\t\t\t\tdata-post=\"2290\"\n\t\t\t\tdata-post-url=\"https:\/\/www.csharptutorial.net\/entity-framework-core-tutorial\/ef-core-views\/\"\n\t\t\t\tdata-post-title=\"How to Query Data from Database Views in EF Core\"\n\t\t\t\tdata-response=\"1\"\n\t\t\t\tclass=\"wth-btn-rounded wth-yes-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\tclass=\"feather feather-thumbs-up block w-full h-full\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> Yes <\/span>\n\t\t\t<\/button>\n\n\t\t\t<button\n\t\t\t\tdata-response=\"0\"\n\t\t\t\tdata-post=\"2290\"\n\t\t\t\tdata-post-url=\"https:\/\/www.csharptutorial.net\/entity-framework-core-tutorial\/ef-core-views\/\"\n\t\t\t\tdata-post-title=\"How to Query Data from Database Views in EF Core\"\n\t\t\t\tclass=\"wth-btn-rounded wth-no-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> No <\/span>\n\t\t\t<\/button>\n\t\t<\/div>\n\t<\/header>\n\n\t<div class=\"wth-form hidden\">\n\t\t<div class=\"wth-form-wrapper\">\n\t\t\t<div class=\"wth-title\"><\/div>\n\t\t\t\n\t\t\t<textarea class=\"wth-message\"><\/textarea>\n\n\t\t\t<button class=\"btn btn-primary wth-btn-submit\">Send<\/button>\n\t\t\t<button class=\"btn wth-btn-cancel\">Cancel<\/button>\n\t\t\n\t\t<\/div>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In this tutorial, you will learn how to create database views and query from them in EF Core.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1970,"menu_order":20,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2290","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages\/2290","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/comments?post=2290"}],"version-history":[{"count":5,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages\/2290\/revisions"}],"predecessor-version":[{"id":2299,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages\/2290\/revisions\/2299"}],"up":[{"embeddable":true,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages\/1970"}],"wp:attachment":[{"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/media?parent=2290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}