[.NET学习] EFCore学习之旅 -1

2023-02-17,,,

1.创建项目

  这里我们先新建一个控制台项目:“jyq.EFCore.Learn”,框架基于.NET6

  

2.安装 Neget包

  Install-Package Microsoft.EntityFrameworkCore.SqlServer

3.创建实体类

  这里我们创建几个用来测试的实体类:Book ,Person ,将其都放在Models文件夹下面

  

  

  

4.创建配置类

  所谓配置类,就是针对我们的实体类要在数据库中建立的表的列配置我们需要的一些属性,比如BookName 我们希望它的最大长度是50,它是不可空的等等配置

  EFCore提供了一个 IEntityTypeConfiguration的配置接口。

  这里我们需要注意的是,EFCore中是约定大于配置的。什么意思呢,就是说EFCore根据我们的实体类创建表的时候,如果你没有为自己的实体类配置某些特性,

那么,EFCore会根据默认的约定来创建表。比如BookName的数据类型是 string 类型的,那么它的默认约定可能就是最大长度是 max,并且是可空的,此处需要注意。

  这里我们新建一个"EntityConfigs"的文件夹,将我们实现的配置类都放在此目录下。

  

  

  

5.创建数据库上下文

  创建一个数据库上下文类 “AppDbContext” 并继承 DbContext。并添加两个DbSet:DbSet<Book>,DbSet<Person>.

后续新增的实体类,都需要在上下文类中添加一个DbSet,否则EFCore是不会帮你映射到数据库中的。

  

  接下来我们需要重写父类的OnConfiguring 方法,在方法体内配置我们要连接的数据库以及对应的数据库连接字符串

  

  然后再重写OnModelCreating方法,在方法体内加入我们在第四步创建的配置类。  

  

  这里说明一下,我们直接使用程序集配置,告诉EFCore你的实体配置类所在的程序集名称,它会自动加载程序集内所有

实现了IEntityTypeConfiguratuin接口的配置类,因为这里我们的类都在一个程序集里面,所有直接给定当前程序集就可以了。

6.Migration 数据库迁移

  数据库迁移,就是EFCore帮我们根据实体类创建对应的表。当然,数据库迁移是可以分为多步的,什么意思呢,就是表在

创建之后如果你的实体类有修改,比如新增字段或者删减字段,那么我们可以再次使用迁移将此修改同步到数据库中。

  使用数据库迁移,需要安装一个Negut包:Install-Package Microsoft.EntityFrameworkCore.Tools。数据库迁移的工作就是

由这个工具来完成的。

  安装完成之后,就可以使用迁移命令来实现对应的操作啦。

  使用的命令如下 Add-Migration Init 。其中Add-Migration是迁移命令,Init是本次迁移命令的操作命名,最好我们取一个有意义

的名称,以便后续进行相关操作时能知道当时都进行了哪些操作。当然,在此过程中需要你的项目编译OK,否则会报错。

  迁移完成后,会自动在项目的目录下生成一个Migrations的文件夹,同时文件夹下会有两个迁移类,类里面就是EFCore在创建

数据库和表的时候要执行的C#语句。

  

  

  迁移完成之后,在使用命令 Update-DataBase 将数据同步到数据库中。

  打开数据库可以看到我们的表已经建立成功了。

  

  

7.实体类修改

  假如随着项目版本的迭代,我们的实体类需要做一些修改,那么修改后我们如何把数据同步到数据库中呢。

  这里我们以 Book类新增一个Author字段,Person新增一个BirthPlace字段,同时新增一个实体类 Student。

新增的实体类配置我们就不再赘述了,参考前面的步骤。

  完成配置之后,我们再次使用迁移命令 Add-Migration AddStudent_AddAuthor_AddBirthPlace,然后在更新

到数据中 Update-Database。  

  打开数据库可以看到,我们新增的字段和实体类都更新进去了。

  

  

  

  

8.结束

  以上就是本次学习的全部内容。通过本次学习将学会如何搭建EFCore环境,如果配置实体类,如何进行数据库迁移等等。

下一节我们通过EFCore来做一些简单的CRUD操作。

[.NET学习] EFCore学习之旅 -1的相关教程结束。

《[.NET学习] EFCore学习之旅 -1.doc》

下载本文的Word格式文档,以方便收藏与打印。