创建基于ASP.NET core 3.1 的RazorPagesMovie项目-应用模型类配合基架生成工具生成Razor页面

Posted hiwuchong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建基于ASP.NET core 3.1 的RazorPagesMovie项目-应用模型类配合基架生成工具生成Razor页面相关的知识,希望对你有一定的参考价值。

本节中,将学习添加用于管理跨平台的SQLLite数据库中的电影的类Movie。从ASP.NET core 模板创建的应用使用SQLLite数据库。

应用模型类(Movie)配合Entity Framework core(简称EF core,这是一种对象关系映射框架(ORM),它可以简化数据访问)使用,以处理数据库

模型类称为POCO类,因为它们与EF Core 没有任何依赖关系。它定义了数据库中存储的数据属性。

 

一、添加数据模型“Movie”

  1、右键单击“RazorPagesMovie”项目>"添加">"新建文件夹"。并命名为“Models”

  技术图片                           技术图片

 

 

 

   2、右键“Models”文件夹,选择“添加”>"类",并将新类命名为“Movie”:

  技术图片

 

 

   3、双击Movie.cs文件,并添加以下属性:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;    //需要手动引用这个名称控件
using System.Linq;
using System.Threading.Tasks;

namespace RazorPagesMovie.Models
{
    public class Movie
    {
        public int ID { get; set; }             //定义数据库的主键
        public string Title { get; set; }       //电影名称

        //DataType属性指定数据的类型是日期。通过此用法:1、用户无需在数据字段中输入时间信息(系统会自动提供一个日期控件);2、仅显示日期,不显示时间信息
        //这个需要引用System.ComponentModel.DataAnnotations 名称空间
        [DataType(DataType.Date)]       
        public DateTime ReleaseDate { get; set; }  //电影发行日期
        public string Genre { get; set; }       // 电影的流派、主题
        public decimal Price { get; set; }      //电影价格
    }
}

  4、‘生成解决方法’,确保没有编译错误:

技术图片  技术图片

 

 

 

 二、搭建“Movie”模型的基架

  此部分,将使用基架工具生成页面,用于对“Movie”模型执行创建、读取、更新、删除操作。俗称CRUD。

 

 

   1、创建Pages/Movies文件夹:

    右键“Pages”文件夹>"添加">“新建文件夹”,并将新文件夹命名为“Movies”:

    技术图片   技术图片

 

 

 

  2、在新建的Movies文件夹上右键单击>"添加">"新搭建基架的项目"

   技术图片

 

 

   在弹出的“添加已搭建基架的新项”对话框中,选择“使用实体框架生成Razor页面(CRUD)”之后,点击“添加”:

  技术图片

 

 

   在弹出的“添加使用实体框架生成Razor页面(CRUD)”对话框中操作如下:

  ‘模型类’的下拉列表中选择“Movie(RazorPagesMovie.Models)”;

  “数据上下文”中,选择+(加号),在弹出的“添加数据上下文”对话框中,将自动生成具有正确命名空间的数据库上下文类:RazorPagesMovie.Data.RazorPagesMovieContext。选择“添加”

  最后,选择“添加”。

  技术图片

 

  然后系统开始自动搭建基架:

 

   技术图片

 

 

   上述步骤完成后,我们观察‘解决方案资源管理器’中发生了如下变化:

    ① appsettings.json文件:增加了用于连接到本地数据库的连接字符串

     技术图片

 

 

 

    ② Pages/Movies文件夹中,新增了5个文件(Create.cshtml、Delete.cshtml、Details.cshtml、Edit.cshtml、Index.cshtml),分别表示创建、删除、详细信息、编辑和索引

    ③ Data文件夹中,新增了1个文件:RazorPagesMovieContent.cs

    技术图片

 

 

    ④ Startup.cs文件中,更新了我们刚才新建的数据库上下文RazorPagesMovieContext:

    技术图片

 

 

 

3、初始迁移

  该部分,我们将学习使用程序包管理器控制台(PMC),它用于:

  添加初始迁移、使用初始迁移来更新数据库

  ① “工具”>“NuGet包管理器”>“程序包管理器控制台”:

    技术图片

 

 

   ② 将会默认在VS2019下方打开PMC窗口。

    分别在控制台中输入以下指令:

    Add-Migration InitialCreate

    Update-Database

    其中:migration命令,可以生成用于创建初始数据库架构的代码。该架构基于在DbContent中指定的模型;

      InitialCreate参数,用于为迁移命名。可以使用任何名称。

      Update命令,表示在尚未应用的迁移中运行Up方法。这种情况下,update在用于创建数据库的Migrations/<time-stamp>_InitialCreate.cs文件中运行Up方法。

    技术图片

 

 

    注意:这两个命令会生成同样的一个警告(其实是提示我们定义的模型类Movie中Price字段的属性decimal是没有指定的类型):

    Microsoft.EntityFrameworkCore.Model.Validation[30000]
    No type was specified for the decimal column ‘Price‘ on entity type ‘Movie‘.…………

   我们暂时忽略该警告。它将在后面的教程中得到修复。

  ③ 此时,观察解决方案资源管理器,发现多了如下的内容:

     技术图片

 

 

4、最后检查的工作,初始迁移后,检查通过依赖关系注入注册的上下文

  ASP.NET Core 通过依赖关系注入进行生成。服务在程序启动期间通过依赖关系注入进行注册。需要这些服务的组件(比如这里的Razor页面)通过构造函数提供相应的服务。

  基架工具自动创建DB上下文并将其注册到依赖关系注入容器。

  ① 检查Startup.ConfigureServices方法,添加了以下代码:

    技术图片

 

   ② /Data/RazorPagesMovieContext.cs文件为Movie模型协调EF Core 功能。它派生自Microsoft.EntityFramworkCore.DbContent。数据上下文指定数据模型中包含哪些实体:

    技术图片

 

      上面的代码,为实体集创建DbSet属性。在实体框架术语中,实体集通常和数据表相对应,实体对应表中的行。

    通过调用DBContentOptions对象中的一个方法将连接字符串名称传递到上下文。本地开发时,ASP.NET Core配置系统在appsettings.json文件中读取数据库连接字符串。

 

  5、测试

    ① 按下ctrl+F5,运行程序,并在地址栏中将/movies追加到原来的URL之后:

    技术图片

 

     ② 点击“Create New”,在打开的添加电影记录页面中录入新的记录:

      技术图片  技术图片

    ③ 可以对刚新加的电影,进行“Edit”、“Details”、“Delete”操作。

 

 

 

  下一个文章中,我们将介绍本节中通过搭建基架生成的Razor页面,并做一些UI的改动。

 

以上是关于创建基于ASP.NET core 3.1 的RazorPagesMovie项目-应用模型类配合基架生成工具生成Razor页面的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Visual Studio 2019 在 Docker 容器中运行 ASP.NET Core 3.1 项目?

如何从 ASP.NET Core 3.1 中的存储库类创建确认电子邮件回调

Wcf 服务在 .NET Core 3.1 控制台应用程序中工作,但在 ASP.NET Core 3.1 Web API 中无法工作

使用 Azure 地理冗余 (RA-GRS) 表存储时,如何更新 ASP.NET Core 中的 TableServiceClient 以指向次要区域?

Asp.net core 3.1 保护 API 和 Web 应用程序

如何正确解析要在 ASP.NET Core 3.1 的 ConfigureServices() 中使用的服务?