本节中,将学习添加用于管理跨平台的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. 数据降维-PCA主成分分析

    1.什么是PCA? PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法.PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特 ...

  2. e = e || window.event的区别及用法

    本文链接:https://blog.csdn.net/qq_41348029/article/details/81288481 e = e || window.event 在做事件处理时,用于区分IE ...

  3. split分割(拆分)文件

    split分割(拆分)文件 需求:指定文件大小拆分文件 # ll -h test/ |grep vmcore -rw-r--r-- 1 root root  12G 12月  7 00:20 vmco ...

  4. 利用scatter()绘制颜色映射的二次方曲线

    程序如下: import matplotlib.pyplot as plt x_value = list(range(1, 1001)) y_value = [x**2 for x in x_valu ...

  5. __getattribute__(self, obj) 这个方法中的obj这个参数

    class Itcast(object): def __init__(self, subject1): self.subject1 = subject1 print("^^^^^^^---- ...

  6. iOS 一些struct类型的NSLog输出格式

    https://my.oschina.net/sayonala/blog/215910 我们经常会输出一些坐标尺寸信息之类的,比如view的frame,是CGRect类型的,用frame.oringi ...

  7. 实战!轻松搭建图像分类 AI 服务

    人工智能技术(以下称 AI)是人类优秀的发现和创造之一,它代表着至少几十年的未来.在传统的编程中,工程师将自己的想法和业务变成代码,计算机会根据代码设定的逻辑运行.与之不同的是,AI 使计算机有了「属 ...

  8. WebSSH画龙点睛之lrzsz上传下载文件

    本篇文章没有太多的源码,主要讲一下实现思路和技术原理 当使用Xshell或者SecureCRT终端工具时,我的所有文件传输工作都是通过lrzsz来完成的,主要是因为其简单方便,不需要额外打开sftp之 ...

  9. Oracle基本的增删改查语句--本人使用scott用户中的表

    --感觉有用点个赞^v^ 1 --创建表空间 create tablespace mykebai datafile 'c:\mykebai.dbf' --数据问价存放位置 size 100m --数据 ...

  10. 时至今日,我们应该承认.Net目前的状况实在堪忧

    一:  .Net之前 .Net 经历了多年的锤炼,语言特性本身非常优雅和完善,也是非常甜品的一种语言 二:  .Net现状 但是与此同时,.Net的生态日益糟糕,困扰着广大.Neter 三:   .N ...