使用实体框架创建ASP .NET Core网站

学习目标

在本教程中,我们将使用MVC,实体框架和易用的Web API创建一个ASP .NET Core 3.0 Web应用程序。

在文章结尾,我们将提供一个可操作的网络应用程序,使我们可以创建和修改测试套件,并在每个测试套件中添加管理测试用例。

我们将着重于快速启动和运行,并将在很大程度上保持新Web应用程序的默认外观。

在此过程中,我们将讨论:

  • ASP .NET Core 3.0
  • 模型视图控制器(MVC)
  • 实体框架
  • 网络API

了解ASP .NET Core 3.0 MVC Web应用程序

ASP .NET Core 3.0是在.NET Core 3.0上运行的Web服务器。这是企业就绪的Web服务器,能够提供静态或动态网页以及API端点。

ASP .NET提供了多种网页技术,但在本文中,我们将重点介绍其Razor语法提供的模型视图控制器(MVC)。

这不是一篇有关了解MVC或Razor细节的文章,但是我们将看一些与这些东西有关的代码。

Model View Controller由以下组件组成:

  • 包含数据的模型或类
  • 视图或网页,显示数据
  • Controller是处理视图请求,修改模型并定向到更新的View的类。

剃刀视图使用基于HTML的模板引擎,该引擎允许各种指令。在本文中,我们将专注于HTML帮助器,并让Visual Studio的脚手架功能为我们生成其余视图。

我们将使用的另一种技术是Entity Framework,它是围绕.NET的数据库盘点程序,可以处理动态查询和数据库迁移。

让我们开始吧。

创建项目

在Visual Studio 2019中,创建一个新项目,然后选择一个ASP.NET Core Web应用程序项目。

ASP .NET有很多不同的风格,但是在本教程中,我们将使用ASP .NET Core 3.0 Web应用程序(模型-视图-控制器)应用程序。

在创建应用程序之前,单击 Change 在身份验证下,选择个人用户帐户,然后在应用内存储用户帐户:

尽管我们不会在身份验证或身份方面做很多事情,但这将使我们能够很好地讨论本文中的Entity Framework。

设置完毕后,ASP .NET Core会默认在开发计算机上默认使用本地数据库。这样一来,您就可以快速开始编写代码,并可以在可移植的环境中工作,直到准备好切换到其他数据库服务器为止。

继续创建项目。

启动应用程序

击中 Control + F5 或打开 Debug 菜单并选择 Start without Debugging。该应用程序将开始编译并很快启动。

您可能会看到类似于以下内容的对话框:

我建议单击“是”,然后信任提供给您的证书。这将允许您在本地使用https。

应用编译后,您的浏览器将打开,并且您将看到类似以下内容的内容:

恭喜,您有一个运行中的ASP .NET Core Web应用程序。

接下来,让我们单击登录以创建/验证您的用户。您应该看到一个数据库错误页面,通知您需要迁移。

为了解决该错误,我们需要转到Package Manager控制台并输入 Update-Database 然后按回车。这将导致使用身份提供者指定的表更新本地数据库

完成后,您将能够成功创建并验证用户身份并登录。

添加您的第一个实体

首先,让我们在 Models 夹。这可以是您想要的任何东西,但是在此示例中,我们将其称为 TestSuite。的 TestSuite 是一个可以容纳的容器 TestCase 实体。

这就是我的 TestCase 类看起来像:

注意大量使用属性。让我们越过它们:

  • Key 告诉实体框架这是数据库表中的主键/标识列。
  • Required 表示该字段必须有一个值。客户端和Entity Framework的生成的列定义都对此进行了解释。
  • HiddenInput 由MVC模板引擎读取,以不呈现给定字段的输入。我们将在下一步中了解这意味着什么。
  • Display 要么 DisplayName 可用于自定义模板中向用户显示字段的方式。

接下来,我们将添加一个MVC控制器来处理我们的实体实体,并向用户展示一个视图。

我们将通过右键单击解决方案浏览器并选择“添加”>“控制器…”来完成此操作。

这将弹出“添加新脚手架物品”对话框,如下图所示:

脚手架的过程使Visual Studio根据您的选项和引用的代码生成代码。在我们的示例中,它将基于指定的模型和“添加MVC控制器”对话框中的选择生成字段。

我们将指定我们的 TestSuite Model类字段中的实体。对于Data Context,您可以根据需要指定一个新名称,但是没有充分的理由不使用现有的名称 ApplicationDbContext 类。其余复选框很容易保持选中状态。

单击添加后,它将为您生成所有内容。这可能需要一些时间。

实体框架迁移概览

脚手架操作完成后,请看一下 ApplicationDbContext。脚手架操作为我们的上下文添加了一行:

public DbSet TestSuite {get; set;}

因为我们现在在EF上下文中定义了一个新的实体,所以我们将需要为定义的实体添加一个Entity Framework迁移。

通过运行来做到这一点 Add-Migration AddedTestCases 在软件包管理器控制台中。请注意,迁移的名称可以是您想要的任何名称,只要您容易理解它所代表的操作即可。

完成此操作后,请查看由 Add-Migration 操作。它看起来应该像这样:

这有助于揭开数据库迁移过程的神秘面纱。数据库迁移只是在应用或还原更改时执行的代码。

准备好应用此数据库迁移后,请转到程序包管理器控制台并运行 Update-Database

公开新观点

在的第25行附近 _layout.cshtml,添加以下代码:

注意 asp-controller 这里指的是控制器的名称,该名称是在本教程前面的脚手架期间命名的。

该链接将使我们能够导航到新的视图系列。您应该能够创建,读取,更新和删除 TestSuite 实体。

尽管生成的代码在很大程度上“可行”,但我确实需要进行一些调整。具体来说,在创建页面上,我删除了创建和修改的字段。

此外,在 TestSuitesController 我还设置了初始创建时间,并在编辑时更新了修改时间。

理想情况下,编辑后处理程序不应采用对象的所有属性,而应仅复制用户界面中公开的值。如果自页面加载以来更改了实体,这将防止某些类型的攻击,并且还可以更好地进行并发。

添加第二个实体

现在我们有一个运作良好的实体,让我们添加一个 TestCase 实体和 TestCases 收集到每个 TestSuite。这表示可以执行的特定测试。

首先,我们创建一个简单的枚举来表示测试用例的状态:

在这里,我正在使用 Display 属性以指定 NotRun 如果它曾经在用户界面中呈现过,则应该显示该值。

接下来,让我们定义 TestCase

这里的字段与以前基本相同,但请注意 TestSuiteTestSuiteId。的 TestSuiteId 是一个外键关系字段,用于存储 TestSuite 所引用的实体 TestSuite 属性。

我们还将添加一个集合到 TestSuite 课,所以我们可以去 TestCase 与之关联的实体:

从这里,我们可以继续脚手架 TestCase 实体,就像我们之前所做的一样 TestSuite

脚手架操作完成后,我们可以通过使用以下命令创建数据库迁移 Add-Migration AddedTestCases 在Package Manager控制台中。

看一下生成的迁移及其如何处理外键。

自动迁移数据库

而不是跑步 Update-Database 不过,这一次,让我们看一下一种使应用程序在启动时自动迁移的方法。

初创公司.cs 并粘贴以下方法:

接下来,在 Configure 方法,添加以下语句:

ApplyDatabaseMigrations(app);

服务器启动后,现在将查看数据库并执行尚未运行的所有迁移。

请注意,如果要在生产应用程序中尝试此操作,建议添加更多日志记录和错误处理。

查看测试用例的工作

像以前一样,添加指向 TestCasesControllerLayout.cshtml。这将让我们查看测试用例的默认视图。

对我来说,第一件事是测试用例状态下拉列表不起作用。无论出于何种原因,默认脚手架似乎都不适合枚举。幸运的是,有一个简单的方法可以解决此问题。

使用 select 元素,我们可以自定义其 asp-items 属性。这使我们可以选择下拉菜单项的来源。内建 GetEnumSelectList HTML助手可以为我们提供所需的确切信息:

这也将尊重我们的显示名称属性,并显示“ Not Run”而不是“ NotRun”。

接下来,通过替换以下内容,让我们从“测试用例”列表链接到“测试套件” @Html.DisplayFor 在网格中 ActionFor 像这样:

这告诉ASP .NET在TestSuites控制器上生成一个指向Details操作的链接,并传入要查看的套件ID。

最后,通过添加以下代码,从测试套件的详细信息视图中呈现测试案例列表:

那是非常简单的代码,但是有一个问题-加载页面时,它会得到一个null引用异常。

这是怎么回事?

除非我们告知,否则默认情况下,实体框架不会延迟加载集合。因为这, Model.TestCases 为null,无法迭代。

我们可以通过进入 TestSuitesControllerDetails 方法。在那里,将LINQ语法更改为:

第2行特别重要。 Include 告诉实体框架也检索 TestCases 实体在加载时 TestSuite

进行此更改后,代码现在应该可以正常工作。

添加Web API

好的,现在我们有了实体和用户界面,让我们添加一个Web API控制器。我们将通过添加控制器对话框来执行此操作,但是使用Entity Framework选择带有Actions的API控制器。

选择 TestCase 实体并命名您的控制器 TestsController。此名称将确保控制器名称不会与TestSuite实体的MVC控制器重叠。此外,此API控制器的默认路径为 api/tests 给定它的名字,这听起来对我来说是正确的。

尽管生成的API方法可让您立即完成许多操作,但让我们添加一些自定义端点,以了解如何使用Entity Framework查询。

将以下代码添加到您的 TestsController

这段代码定义了四个新的GET端点来处理请求。这些中的每一个都将调用 GetTestCasesByStatusAsync 并要求过滤到特定状态。

GetTestCasesByStatus 该方法将使用LINQ的 Where 过滤方法 TestCase 基于查询的实体 status 传入的参数。

这是使用实体框架无需任何SQL即可管理数据库对象的示例。结果是透明的,可维护的,并且支持Visual Studio中的所有代码完成和编译器安全功能。

我们可以通过在Web应用程序运行时使用Postman或类似于我们的新端点之一的HTTP GET请求进行测试。

注意:如果您想了解有关Web API或如何创建仅API的项目的更多信息,请阅读我有关.NET Core API的专门文章。

结论

我们设法建立了一个ASP .NET Core 3.0 Web应用程序,并通过用户管理,数据库支持和Web API运行。

如您所见,基于属性的脚手架和HTML帮助器是使用户界面正常运行的非常有效的方法。

此外,实体框架为您提供了构建数据库应用程序的速度和灵活性。它使您可以在编译器和IntelliSense的帮助下在Visual Studio中工作。这样可以最大程度降低您犯错的风险。

Entity Framework迁移和自动迁移通过将其烘焙到应用程序本身中,使数据库迁移过程非常简单。如果团队得到适当的测试和日志记录以及标准的数据库备份和灾难恢复计划的支持,这可能是团队的一个选择。

最终,ASP .NET Core大大降低了创建新应用程序的门槛,并为您提供了可快速启动并运行的生产力工具。它还具有深度和自定义性,可以采用最初的概念并每天为成千上万的客户提供服务。

“使用实体框架创建ASP.NET核心站点”一文首先出现在“杀死所有缺陷”上。

资讯来源:由0x资讯编译自DEV,原文:https://dev.to/integerman/create-an-asp-net-core-site-with-entity-framework-5fi4 ,版权归作者所有,未经许可,不得转载
你可能还喜欢