• 创建基于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的改动。

  • 相关阅读:
    深入浅出 Java Concurrency (4): 原子操作 part 3 指令重排序与happens-before法则
    深入浅出 Java Concurrency (3): 原子操作 part 2
    深入浅出 Java Concurrency (2): 原子操作 part 1
    深入浅出 Java Concurrency (1) : J.U.C的整体认识
    java中关键字volatile的作用
    教你如何迅速秒杀掉:99%的海量数据处理面试题(转)
    STL容器介绍(转)
    IoC框架
    LeetCode 548. Split Array with Equal Sum (分割数组使得子数组的和都相同)$
    LeetCode 533. Lonely Pixel II (孤独的像素之二) $
  • 原文地址:https://www.cnblogs.com/hiwuchong/p/12080266.html
Copyright © 2020-2023  润新知