ORM框架EntityFramework在ASP.NetCoreAPI中的应用

什么是EntityFrameworkCore?

EntityFramework Core 是微软推出的一个基于.Net Core 的轻量级ORM框架。ORM能够处理数据库与高级编程语言中
对象之间的映射关系,它能够将程序中的对象自动持久化到关系型数据库中,并能够将数据库中的数据信息自动映射到编
程语言中的对象,从而无须开发人员直接写SQL语句,使用EFCore能够明显的提高开发效率。关系型数据库的数据是存储在
由行和列组成的二维表格中,EFCore 在进行关系映射时,.Net 对象 与关系型数据库的构成元素有着一一对应的关系,注意
EFCore在应用程序与数据库之间起一个桥梁的作用。

.Net对象 关系型数据库
类的属性
.Net集合中的元素
int ID 主键
对其他类的引用 外键

主键一般都是int型,唯一,由数据库自动生成。

EFCore的使用

EFCore有两种使用方法:第一种是代码优先,第二种是数据库优先。代码优先是指EFcore能够利用先创建好的实体类
创建数据库和表;而数据库优先则相反是利用先创建好的数据库和表生成与之匹配的实体类。

要使用代码优先,必须先创建一个实体类

1
2
3
4
5
6
7
8
9
10
11
namespace AspApi02NOmvc.Models
{
public class UserModel
{
public int Id { get; set; }//主键
public string? UserName { get; set; }
public string? PassWord { get; set; }
public string? UserMail { get; set; }
}
}

创建实体类后就需要了解一个类DbContext。

DbContext位于Microsoft.EntityFrameworkCore命名空间下,代表程序与数据库之间会话或数据上下文,使用它能够
完成查询和保存等操作;在程序中使用EFCore时,需要创建一个DbContext的派生类,在派生类中添加一个或
若干个DbSet类型的公共属性,这些属性表示相应实体的集合,对它们的操作最终会反映到数据库中的数据表。

1
2
3
4
5
6
7
8

public class DataContext:DbContext
{
public DataContext(DbContextOptions<DataContext> options) : base(options)//构造函数
{}
public DbSet<UserModel> UserModels { get; set; }//实体集合
}

在appsettings.json中配置默认连接字符串,注意添加进去是否加 “,” 。json格式末尾键值对不加 “,” 。
1
2
3
4
5

"ConnectionStrings": {
"DefaultConnection": "Server = localhost;DataBase = APIDbTest01;Trusted_Connection = true;TrustServerCertificate = true;"
}

然后就需要对EF进行配置。如果版本低于.Net 6.0,需要在Startup中进行配置,使用configureServices和configure方法;
在.Net 6.0及其以上版本,Startup 已经合并到program中,所以可以直接在program中添加服务

1
2
3
4
5
6
7
8
9
10

using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<DataContext>(options =>
{
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"));//这里的连接字符串在配置文件中
});

创建一个控制器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

[ApiController]
[Route("api/[controller]")]
public class LoginController : Controller
{

private readonly DataContext _dataContext;

public LoginController(DataContext dataContext)
{
_dataContext = dataContext;
}

[HttpPost("RegUser")]
public async Task <ActionResult> RegUser([FromForm]UserModel userModel)
{
if (!ModelState.IsValid){return BadRequest("模型验证失败");}
var user = new UserModel
{ //这里没让Id = userModel.Id 是因为Id是主键,应该让数据库自动生成。
UserName = userModel.UserName,
PassWord = userModel.PassWord,
UserMail = userModel.UserMail,
};
_dataContext.UserModels.Add(user);
await _dataContext.SaveChangesAsync();
return Ok("添加成功");
}

}
最后在程序包管理器控制台中使用命令Add-Migration 和Update-DataBase就可以完成数据库的迁移和数据库的创建。

然后就可以运行API并创建数据了:

屏幕截图 2024 11 21 112112

如果使用postman调用api,需要注意传参,因为使用了[FromForm]特性,接收from表单,postman的传参设置为:

屏幕截图 2024 11 21 111022(1)