模型和数据库
Q7nl1s admin

重要概念

模型 Model

◼ 模型(Model):是应用的实体类,用于在内存中暂时存储数据,并在数据变化时通知控制器。

◼ 一个简单的C#模型类:

Movie.cs

1
2
3
4
5
6
7
8
public class Movie
{
public int Id { get; set; } //电影id
public string? Title { get; set; } //电影名称
public DateTime ReleaseDate { get; set; } //上映日期
public string? Genre { get; set; } //电影类型
public decimal Price { get; set; } //电影票价
}

ORM

面向对象开发方法是当今企业级应用主流开发方法。

关系数据库是企业级应用永久存放数据的主流数据存储系统。

对象关系数据是业务实体两种表现形式:业务实体在内存中表现为对象(非持久化存储),在数据库中表现为关系数据(持久化存储)

◼ 需要一种技术实现二者间映射,以简化编程,提高系统效率 。


ORM:对象关系映射

◼ ORM (Object Relation Mapping) 是对象/关系映射,它将内存中的对象和数据库中的表建立映射关系。

m_d_0

EF Core

◼ EF Core:Entity Framework Core的简称,是微软提供的ORM数据访问技术。

◼ 特点:轻量化、可扩展、开源和跨平台

m_d_1


创建模型

m_d_2

模型命名:扩展名为.cs

m_d_13

Movie.cs基本代码:

1
2
3
4
5
6
7
namespace MvcMovie.Models 
{ // 名字空间(包名)
public class Movie
{

}
}

模型添加属性:

1
2
3
4
5
6
7
8
9
10
11
12
namespace MvcMovie.Models
{
public class Movie
{
public int Id { get; set; } // 电影 id // 模型一般要包含一个Id属性,数据库需要该字段作为主键
public string? Title { get; set; } // 电影名称 // string类型后面的"?"表示支持null(空对象)
public DateTime ReleaseDate { get; set; } // 上映日期
public string? Genre { get; set; } // 电影类型
public decimal Price { get; set; } // 电影票价 // decimal:高精度浮点数,适合财务场合

}
}

根据需要给属性添加注解:红色部分,如DisplayDataType

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Movie
{
public int Id { get; set; } //电影id

[Display(Name = "电影名称")]
public string? Title { get; set; } //电影名称

[Display(Name = "上映日期")]
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; } //上映日期

[Display(Name = "电影类型")]
public string? Genre { get; set; } //电影类型

[Display(Name = "票价")]
[DataType(DataType.Currency)]
public decimal Price { get; set; } //电影票价
}

注解需要导入包:using System.ComponentModel.DataAnnotations;

[Display(Name = "...")] 注解:设置显示名称,给字段指定可本地化的字符串

[DataType(...)] 注解:设置字段的数据格式类型。(对数据做格式规定)

DataType.Date表示日期格式类型,作用:用户无需在该字段中输入时间信息, 显示时也仅显示日期。(其他类型见下页说明)

DataType.Currency表示货币格式类型 (数据显示时前面带货币符号,如¥)


补充:DataType的一些类型值

DataType类型值 说明
DataType.Currency 表示货币值
DataType.Date 表示日期值
DataType.EmailAddress 表示电子邮件地址
DataType.MultilineText 表示多行文本
DataType.Password 表示密码值
DataType.Time 表示时间值
DataType.Url 表示一个 URL 值

使用 EF Core 框架

EF Core 框架:主要为自动模型生成CRUD功能 (Create、Read、Update 和 Delete)

m_d_4

选择”视图使用EF的MVC控制器” :

m_d_3

配置基架:

m_d_5


基架成功添加:完成了很多任务,其中★为重点

m_d_6


数据库连接串 – 位于 appsettings.json 文件

appsettings.json

1
2
3
4
5
6
{
...
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovie.Data;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}

ConnectionStrings:数据库连接串

MvcMovieContext:数据库上下文

localdb:VS内置SQLServer Express数据库服务器的名称 // Server = (localdb)\mssqllocaldb;

MvcMovie.Data:默认的数据库名(也可自行命名,如MyDB) // Database = MvcMovie.Data;


Movies控制器代码:

m_d_7

Movies视图 – 以Index视图为例

m_d_14


数据库上下文代码 – 含有2个重要概念

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using Microsoft.EntityFrameworkCore;
namespace MvcMovie.Data
{
public class MvcMovieContext : DbContext
{
public MvcMovieContext (DbContextOptions<MvcMovieContext> options) // DbContext:数据库上下文类,封装与数据库和模型相关的功能,依据数据
实体状态创建SQL命令,将数据更新保存到数据库中(映射数据库表) ★

: base(options)
{
}

public DbSet<MvcMovie.Models.Movie> Movie { get; set; } = default!; // DbSet:实体对象的集合,能把对实体的LINQ查询转换为针对数据库的查询(映射数据库表)★
}
}

① DbContext:数据库上下文类,封装与数据库和模型相关的功能,依据数据实体状态创建SQL命令,将数据更新保存到数据库中(映射数据库表) ★

② DbSet:实体对象的集合,能把对实体的LINQ查询转换为针对数据库的查询(映射数据库表)★


运行Movie控制器:

m_d_8


EF Core 迁移

创建数据库 ★ ★ ★

m_d_9

  1. Add-Migration InitialCreate
  2. Update-Database

迁移命令说明

◼ 命令1:Add-Migration InitialCreate (InitialCreate:迁移文件名)

​ ◼ 功能:创建数据库迁移。

​ ◼ 数据库迁移信息存储在:Migrations目录/{timestamp}_InitialCreate.cs 文件中 (timestamp:时间戳)

m_d_10

◼ 命令2: Update-Database

​ ◼ 功能:更新数据库(依据第1个命令创建的最新迁移文件)。 (根据时间戳就知道最新的迁移)

​ ◼ 此命令将执行最新迁移文件中的 Up() 方法。


成功迁移之后会创建或更新数据库:

m_d_11

再次运行一下:成功!

m_d_12

 Comments
Comment plugin failed to load
Loading comment plugin
Powered by Hexo & Theme Keep
Unique Visitor Page View