https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-mvc-app/adding-model?view=aspnetcore-3.1&tabs=visual-studio

这一章节中,我们开始认识一下MVC中的M,也就是Model。
Entity Framework Core是微软提供给开发者的一个ORM框架,类似java中的MyBatis和Hibernate。将Plain Old CLR Objects(POCO)类可以直接转换为数据库中的增删改查的操作代码,减少重复开发代码量。

POCO
这种类是只有属性没有方法的类,纯粹表示数据,可以用于和数据库之间的映射。

EF Core库只要求我们写POCO类,然后该库就可以根据这些类自动在数据库中建立对应的表,以及相关的增删改查。

新建model

Movie.cs

using System;
using System.ComponentModel.DataAnnotations;

namespace MvcMovie.Models
{
    public class Movie
    {
        public int Id { get; set; }
        public string Title { get; set; }

        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }
        public decimal Price { get; set; }
    }
}

安装EFCore SqlProvider
示例选用SqlServer Local数据库,专门用于开发环境的sql server数据库,因此需要安装EFcore库需要用到的sqlServer的Provider库,
选中Tools工具>NuGet 包管理器 > 程序包管理器控制台 (PMC).

Install-Package Microsoft.EntityFrameworkCore.SqlServer

在安装provider的时候,因为依赖,所以也会自动安装EFCore库。

创建数据库上下文
所谓数据库上下文,就是告诉EFCore,我们需要通过什么类建立表数据,以及对该类在表中的增删改查。
创建Data文件夹,添加MvcMovieContext.cs,添加代码。

using Microsoft.EntityFrameworkCore;
using MvcMovie.Models;

namespace MvcMovie.Data
{
    public class MvcMovieContext : DbContext
    {
        public MvcMovieContext (DbContextOptions options)
            : base(options)
        {
        }

        public DbSet Movie { get; set; }
    }
}

EFCore需要的上下文都需要以 DbContext作为基类,DbSet表示一个集合,对应数据库中的一张表,其中的实体对象则对应一行记录。这里Movie为DbSet类型,所以表名为Movie,DbSet中存储的是Movie即我们自定义的类型,对应一行记录的结构。

注册数据库上下文
ASP.net core基本使用了依赖注入的技术思想。EFCore DBContext作为一种服务需要注册进去才能使用。 在Startup.cs中进行注册,添加如下2行代码

using MvcMovie.Data;
using Microsoft.EntityFrameworkCore;

然后在ConfigureServices中添加一行代码,如下斜体,

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
*
    services.AddDbContext(options =>
            options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));*
}

Configuration.GetConnectionString("MvcMovieContext")是从文件appsettings.json中获取数据库连接字符串。
在appsettings.json中添加一个key:value

"ConnectionStrings": {
    "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-1;Trusted_Connection=True;MultipleActiveResultSets=true"
  }

搭建基架

这是一个专门用于对一组经常关联在一起的开发步骤进行整体创建的工具。比如创建一个模型,会随后创建控制器,一般都会要有增删改查以及对应视图这些开发操作,通过这个功能,就可以一步搭建完毕。无需重复劳动。
右键Controllers选择添加>新搭建基架项目,选择Entity FrameWork的MVC。
弹出对话框选择Model class,上下文选择MvcMovieContext,其他都是默认即可。
然后基架工具会创建两类东西:

1. Controller: Controllers/MoviesController.cs
2. View:Views/Movies/*.cshtml   (Create, Delete, Details, Edit, and Index)

也就是说,通过Model和MvcMoviewContext上下文,就把MVC中剩下的VC两样代码全都自动创建完成了。这个过程,微软给出的英文是scaffolding

数据库
MVC都准备好了,接下来就是把数据库创建了,以及对应表创建完成。这个操作,叫做Initial migration。中文翻译的话,应该叫初始化迁移。
migration是EF core的一个功能。用于将Model通过DBContext上下文映射到数据库,并且同步数据库中的表结构。
在程序包管理器控制台 (PMC).中执行如下

Add-Migration InitialCreate
Update-Database

第一行执行,会根据mvcDBContext生成一个Migrations/{timestamp}_InitialCreate.cs文件。
第二句执行,则会执行Migrations/{time-stamp}_InitialCreate.cs文件中的up方法。

完成
到现在。新建一个MVC以及对应数据库的过程就完成了。 运行一下,然后通过http://localhost:59191/Movies 来访问。