本节中,将学习添加用于管理跨平台的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页面的更多相关文章

  1. 创建基于ASP.NET core 3.1 的RazorPagesMovie项目(一)-创建和使用默认的模板

    声明:参考于asp.net core 3.1 官网(以后不再说明) 本教程是系列教程中的第一个教程,介绍生成 ASP.NET Core Razor Pages Web 应用的基础知识. 在本系列结束时 ...

  2. 创建基于ASP.NET core 3.1 的RazorPagesMovie项目(三)-已搭建基架的Razor页面解释和更新

    本节主要介绍在上一节中通过搭建基架而创建的Razor页面,并做一些UI改变. 一.创建.删除.详细信息和编辑页面 1.双击Pages/Movies/Index.cshtml.cs文件,这是一个Razo ...

  3. 基于ASP.NET Core 3.x的端点路由(Endpoint Routing)实现控制器(Controller)和操作(Action)分离的接口服务

    本文首发于 码友网 -- <基于ASP.NET Core 3.x的端点路由(Endpoint Routing)实现控制器(Controller)和操作(Action)分离的接口服务> 前言 ...

  4. 基于ASP.NET Core 创建 Web API

    使用 Visual Studio 创建项目. 文件->新建->项目,选择创建 ASP.NET Core Web 应用程序. 基于 ASP.NET Core 2.0 ,选择API,身份验证选 ...

  5. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-1

    来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 本系列文章为翻译加上我个人的使用心得理解,希望帮助热爱学习的程序员. 珍重声明:本系列文章会跟原文有点出入,去掉了罗里吧嗦的文字. ...

  6. 如何基于asp.net core的Identity框架在mysql上作身份验证处理

    首先了解这个概念,我一开始也是理解和掌握基本的概念,再去做程序的开发.Identity框架是微软自己提供,基于.net core平台,可拓展.轻量 级.面向多个数据库的身份验证框架.IdentityS ...

  7. 基于ASP.Net Core开发的一套通用后台框架

    基于ASP.Net Core开发一套通用后台框架 写在前面 这是本人在学习的过程中搭建学习的框架,如果对你有所帮助那再好不过.如果您有发现错误,请告知我,我会第一时间修改. 知其然,知其所以然,并非重 ...

  8. 基于ASP.NET Core 3.0快速搭建Razor Pages Web应用

    前言 虽然说学习新的开发框架是一项巨大的投资,但是作为一个开发人员,不断学习新的技术并快速上手是我们应该掌握的技能,甚至是一个.NET Framework开发人员,学习.NET Core 新框架可以更 ...

  9. 基于ASP.NET core的MVC站点开发笔记 0x01

    基于ASP.NET core的MVC站点开发笔记 0x01 我的环境 OS type:mac Software:vscode Dotnet core version:2.0/3.1 dotnet sd ...

随机推荐

  1. python3 之 趣味数学题(爱因斯坦)

    爱因斯坦曾出过这样一道有趣的数学题: 有一个长阶梯,若每步上 2 阶,最 后剩 1 阶; 若每步上 3 阶,最后剩 2 阶; 若每步上 5 阶,最后剩 4 阶; 若每步上 6 阶,最后剩 5 阶; 只 ...

  2. day 49

    今日内容 标签操作 样式操作 样式类操作 addClass(); // 添加指定的CSS类名. removeClass(); // 移除指定的CSS类名. hasClass(); // 判断样式存不存 ...

  3. Head First设计模式——模板方法模式

    前言:本篇我们讲解模板方法模式,我们以咖啡和茶的冲泡来学习模板方法.关于咖啡另一个设计模式例子也以咖啡来讲解,可以看下:Head First设计模式——装饰者模式 废话不多说,开始进入模板方法模式. ...

  4. Identityserver4配置证书

    IS4中如果token的类型是JWT,则需要使用RS256算法生成非对称签名,这意味着必须使用私钥来签名JWT token,并且必须使用对应的公钥来验证token签名,即验证token是否有效.使用R ...

  5. jenkins System error

    背景 在使用WAR包安装jenkins后,启动tomcat,显示启动成功,但最后提示信息如下: 04-Dec-2018 03:28:21.563 WARNING [Computer.threadPoo ...

  6. 使用Python将xmind脑图转成excel用例(一)

    最近接到一个领导需求,将xmind脑图直接转成可以导入的excel用例,并且转换成gui可执行的exe文件,方便他人使用. 因为对Python比较熟悉,所以就想使用Python来实现这个功能,先理一下 ...

  7. @PathVariable 处理参数为空的情况

    @RequestMapping(value = "/get/{id}/{userId}", method = RequestMethod.GET) public Result ge ...

  8. ruby传参之引用类型

    ruby是完全面向对象语言,所有的变量所储存的,其实是对象的引用. 所以ruby方法的参数,也都是引用类型.即使是基本的类型,比如布尔,整数,小数等,也是一样. class MyObject attr ...

  9. 全栈项目|小书架|微信小程序-实现搜索功能

    效果图 上图是小程序端实现的搜索功能效果图. 从图中可以看出点击首页搜索按钮即可进入搜索页面. 布局样式是:搜索框 + 热搜内容 + 搜索列表. 搜索框使用 lin-ui 中的 Searchbar组件 ...

  10. java基础-泛型举例详解

    泛型 泛型是JDK5.0增加的新特性,泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数.这种类型参数可以在类.接口.和方法的创建中,分别被称为泛型类.泛型接口.泛型方法. 一.认识泛型 在没 ...