本文来自:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/razor-pages/model

在本部分中将添加用于管理数据库中的电影的类。 可以结合使用这些类和 Entity Framework Core (EF Core) 来处理数据库。 EF Core 是对象关系映射 (ORM) 框架,可以简化必须要编写的数据访问代码。
要创建的模型类称为 POCO 类(源自“简单传统 CLR 对象”),因为它们与 EF Core 没有任何依赖关系。 它们定义数据库中存储的数据属性。
在本教程中,首先要编写模型类,然后 EF Core 将创建数据库。 有一种备选方法(此处未介绍):从现有数据库生成模型类

添加数据模型
在解决方案资源管理器中,右键单击“RazorPagesMovie”项目 >“添加” > “新建文件夹”。 将文件夹命名为“Models”。
右键单击“Models”文件夹。 选择“添加” > “类”。 将类命名为“Movie”,并添加以下属性:
向 Movie 类添加以下属性:

 using System;

 namespace RazorPagesMovie.Models
{
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
}
}

数据库需要 ID 字段作为主键。ID字段应该是EF的要求。

添加数据库上下文类

向“Models”文件夹添加以下名为 MovieContext.cs 的 DbContext 派生类:(这里要引入Microsoft.EntityFrameworkCore命名空间,结合EF,DB first)

using Microsoft.EntityFrameworkCore;

namespace RazorPagesMovie.Models
{
public class MovieContext : DbContext
{
public MovieContext(DbContextOptions<MovieContext> options)
: base(options)
{
} public DbSet<Movie> Movie { get; set; }
}
}

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

添加数据库连接字符串

将连接字符串添加到 appsettings.json 文件。

{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"ConnectionStrings": {
"DefaultConnection": "Server=192.168.137.216;Database=MovieCore;User Id=sa;Password=aaa;"
}
}

注册数据库上下文

使用 Startup.cs 文件中的依存关系注入容器注册数据库上下文。需要引用命名空间:using RazorPagesMovie.Models;

public void ConfigureServices(IServiceCollection services)
{
// requires
// using RazorPagesMovie.Models;
// using Microsoft.EntityFrameworkCore; services.AddDbContext<MovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MovieContext")));
services.AddMvc();
}

生成项目以验证有没有任何错误存在。(现在运行网站虽然是成功的,但是数据库还没有自动添加)

添加基架工具并执行初始迁移
在本部分中,使用程序包管理器控制台 (PMC) 执行以下操作:
添加 Visual Studio Web 代码生成包。 必须添加此包才能运行基架引擎。
添加初始迁移。
使用初始迁移来更新数据库。
从“工具”菜单中,选择“NuGet 包管理器” > “包管理器控制台”。

在 PMC 中,输入以下命令:

Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design
Add-Migration Initial
Update-Database

Install-Package 命令安装运行基架引擎所需的工具。
Add-Migration 命令生成用于创建初始数据库架构的代码。 此架构以(Models/MovieContext.cs 文件中的)DbContext 中指定的模型为基础。 Initial 参数用于为迁移命名。 可以使用任意名称,但是按照惯例应选择描述迁移的名称。 有关详细信息,请参阅迁移简介。
Update-Database 命令在用于创建数据库的 Migrations/<time-stamp>_InitialCreate.cs 文件中运行 Up 方法。

搭建“Movie”模型的基架(就是自动生成添加、修改、删除、列表等页面)

按下图提示操作

从命令行(在包含 Program.cs、Startup.cs 和 .csproj 文件的项目目录中)中运行如下命令:

dotnet aspnet-codegenerator razorpage -m Movie -dc MovieContext -udl -outDir Pages\Movies --referenceScriptLibraries

执行完毕后显示

如果收到错误:

No executable found matching command "dotnet-aspnet-codegenerator"

打开一个到项目目录(包含 Program.cs、Startup.cs 和 .csproj 文件的目录)的命令 shell。
如果收到错误:

The process cannot access the file
'RazorPagesMovie/bin/Debug/netcoreapp2.0/RazorPagesMovie.dll'
because it is being used by another process.

退出 Visual Studio,然后重新运行命令。
下表详细说明了 ASP.NET Core 代码生成器的参数:

参数 描述
-m 模型的名称。
-dc 数据上下文。
-udl 使用默认布局。
-outDir 用于创建视图的相对输出文件夹路径。
--referenceScriptLibraries 向“编辑”和“创建”页面添加 _ValidationScriptsPartial

使用 h 开关获取 aspnet-codegenerator razorpage 命令方面的帮助:

dotnet aspnet-codegenerator razorpage -h

测试应用

运行应用并将 /Movies 追加到浏览器中的 URL (http://localhost:port/movies)。
测试“创建”链接。

测试“编辑”、“详细信息”和“删除”链接。
如果收到 SQL 异常,则验证是否已运行迁移并更新了数据库:
下一个教程介绍由基架创建的文件。


ASP.NET CORE RAZOR :向 Razor 页面应用添加模型的更多相关文章

  1. ASP.NET Core 中的 Razor 页面介绍

    标题:ASP.NET Core 中的 Razor 页面介绍 地址:https://docs.microsoft.com/zh-cn/aspnet/core/razor-pages/index?view ...

  2. asp.net core 系列 8 Razor框架路由(下)

    三.页面路由操作约定 接着上篇讲asp.net core 系列 7 Razor框架路由.在上篇继续第三节 "页面路由操作约定" 的最后一小节 AddPageRoute . 3.3. ...

  3. 【翻译】介绍 ASP.NET Core 中的 Razor Pages

    介绍 ASP.NET Core 中的 Razor Pages 原文地址:Introduction to Razor Pages in ASP.NET Core         译文地址:介绍 asp. ...

  4. asp.net core系列 39 Razor 介绍与详细示例

    原文:asp.net core系列 39 Razor 介绍与详细示例 一. Razor介绍 在使用ASP.NET Core Web开发时, ASP.NET Core MVC 提供了一个新特性Razor ...

  5. ASP.NET Core 3.x Razor视图运行时刷新实时编译

    前言: 很长一段时间没有写过ASP.NET Core Razor(.cshtml)视图开发WEB页面了,今天刚好把之前做的一个由ASP.NET Core 2.2+Razor开发的项目升级到ASP.NE ...

  6. ASP.NET Core MVC里面Razor如何获取URL参数

    原文:ASP.NET Core MVC里面Razor如何获取URL参数 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https:// ...

  7. Asp.net Core 3.1 Razor视图模版动态渲染PDF

    Asp.net Core 3.1 Razor视图模版动态渲染PDF 前言 最近的线上项目受理回执接入了电子签章,老项目一直是html打印,但是接入的电子签章是仅仅对PDF电子签章,目前还没有Html电 ...

  8. asp.net core中的razor页面

    Razor 页面(Razor Pages)是 ASP.NET Core 2.0 中新增的一种Web页面模型,相对MVC形式更加简单易用,可以说是一个服务端的MVVM模型,本文简单的介绍一下它的用法. ...

  9. ASP.NET CORE RAZOR :将文件上传至 ASP.NET Core 中的 Razor 页面

    本部分演示使用 Razor 页面上传文件. 本教程中的 Razor 页面 Movie 示例应用使用简单的模型绑定上传文件,非常适合上传小型文件. 有关流式传输大文件的信息,请参阅通过流式传输上传大文件 ...

随机推荐

  1. flask框架基本使用(4)(钩子函数,异常,命令行运行)

    flask 框架基本使用(1):https://www.cnblogs.com/chichung/p/9756935.html flask 框架基本使用(2):https://www.cnblogs. ...

  2. HDU5469 Antonidas(树分治&&哈希)

    给你一颗点上有字符的树,问一个给定的字符串是否是这棵树上的两点的路径. 树分治的思想就是每次找重心,重心下的子问题分解去做,然后就是合并了.合并的时候用一个总的set<pair<len,h ...

  3. 小白到web前端工程师需要学习哪些知识?

    随着web3.0时代,那么web前端开发技术人才越来越吃香,而且web前端领域划分越来越细,对技术的需求越来越高,想学习web前端的人也是越来越多.那么,如何学习web前端知识?从哪开始?转型成为we ...

  4. POJ 2689.Prime Distance-区间筛素数

    最近改自己的错误代码改到要上天,心累. 这是迄今为止写的最心累的博客. Prime Distance Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  5. HDU 5880 Family View (2016 青岛网络赛 C题,AC自动机)

    题目链接  2016 青岛网络赛  Problem C 题意  给出一些敏感词,和一篇文章.现在要屏蔽这篇文章中所有出现过的敏感词,屏蔽掉的用$'*'$表示. 建立$AC$自动机,查询的时候沿着$fa ...

  6. 「kuangbin带你飞」专题十五 数位DP

    传送门 A.CodeForces - 55D Beautiful numbers 题意 一个正整数是 漂亮数 ,当且仅当它能够被自身的各非零数字整除.我们不必与之争辩,只需计算给定范围中有多少个漂亮数 ...

  7. #420 Div2 C

    #420 Div2 C 题意 不断把数加入到一个栈里,取数的时候要求按照 1~n 的顺序取数,每次取数保证数一定在栈里,如果要取的数不在栈头,可以选择对栈排序一次.问最少排序几次. 分析 只要栈头的数 ...

  8. 线性基【p4570】 [BJWC2011]元素

    题目描述-->p4570 [BJWC2011]元素 题目大意 给定一些矿石的编号与价值,我们想要得到最大的价值和,并且选定物品的编号异或之和不为0. 分析 线性基就不多bb了,来这里->p ...

  9. iframe和response.sendRedirect()跳转到父页面的问题

    在项目中,因为为了给页面分层次,就使用了 内嵌iframe 的分了三个框.在子页面进行操作的时候,如果session超时,就要被拦截器拦截重新回到首页进行登录,但是在sub页 面 ,进行操作的时候,如 ...

  10. UVA 103 Stacking Boxes n维最长上升子序列

    题目链接:UVA - 103 题意:现有k个箱子,每个箱子可以用n维向量表示.如果一个箱子的n维向量均比另一个箱子的n维向量大,那么它们可以套接在一起,每个箱子的n维向量可以互相交换值,如箱子(2,6 ...