目录
一 上一章回顾
一 上一章回顾
二 EFCore概述
三 Nuget包配置
四 建立数据模型和数据表
1 新建Steel实体类
2 新建SteelContext
五 总结
六 下章预告
二 Migration概述
- 面向对象的ORM开发中,数据库并不需要程序员手动创建,而是根据实体类的定义变化更新,自动更新数据库中的表以及表结构的操作,叫作Migration(迁移)。
三 Migration流程
程序包管理器控制台→选择默认项目为建立实体类的项目→执行数据库迁移指令(PM> Add-Migration Steel),(InitialCreate:当前的migration的名字,可随意命名)
Add-migration作用:根据实体类及配置生成操作数据库的迁移代码,执行成功后项目中会多出一个migration文件夹,示例图中因为已经生成过该文件夹了,所以显示已经存在
其中这个Migration时间+迁移操作名的CS文件中,即包含根据实体类及配置生成操作数据库的迁移代码
创建的Steeel实体类生成的数据库迁移代码如下所示:
public partial class Steel : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Steel",
columns: table => new
{
ID = table.Column<string>(type: "nvarchar(10)", maxLength: 10, nullable: false),
SG = table.Column<string>(type: "nvarchar(10)", maxLength: 10, nullable: false),
Len = table.Column<int>(type: "int", maxLength: 5, nullable: false),
Wid = table.Column<int>(type: "int", maxLength: 5, nullable: false),
Thk = table.Column<int>(type: "int", maxLength: 5, nullable: false),
Pos = table.Column<int>(type: "int", maxLength: 5, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Steel", x => x.ID);
});
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Steel");
}
}
四 更新数据库
程序包管理器控制台→执行Update-Database更新数据库命令后,创建数据库的迁移代码才会执行,此时在数据库中自动生成对应数据表。
PS:在更新数据库的过程中,可能有部分同学会遇到和我一样的问题,提示“证书链是由不受信任的颁发机构颁发的”,需要在SteelContext类配置连接字符串处,额外添加TrustServerCertificate=true授权信任服务器证书即可,如下图所示
五 成果展示
执行成功后我们发现此时数据库中已经生成了我们创建的Steel数据表
并且还生成了一个EFMigrationHistory表,里面主要记录我们的迁移历史和EFCore具体版本
六 更新数据库
当需要修改数据库内容时 ,只需要修改相关实体类的内容,再次执行迁移指令Add-migration InitialCreate以及更新指令Update-Database即可,但是此时迁移指令的命名应当采用不同的名字。
七 步骤总结
创建数据表的步骤如下所示:创建实体类Steel→创建DBContext类→执行Add-Migration数据库迁移命令→执行Update-Database更新数据库命令→在数据库中生成实体类对应数据表
八 总结
以上我给大家介绍了ORM框架的概念、ORM框架解析、流程结构以及ORM与传统SQL对比等内容,我们从中可以发现ORM框架明显行之有效的提高了开发者体验,提高了可读性和可维护性,但由于多加了一层抽象,不可避免的降低了部分性能。在实现生产环境,需要根据实际的项目需求来进行抉择。
九 下章预告
下一章我会教大家
博主RaymondLeigh:如果您觉得本文为您提供了结局思路或解决了您的实际问题,麻烦您🙏帮忙点赞、收藏、评论、关注一键四连,您的举手之劳将为我写作提供动力源泉!🤞
print('Hello,RaymondLeigh!') # 每日问候,跟大家问好!
🌞精品前端UI设计专栏:MaterialDesign专栏
💾精品后端数据库专栏:SqlServer专栏 EFCore专栏
💻精品程序开发专栏 VisualStudio专栏