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的更多相关文章

  1. IT人的自我导向型学习:学习的4个层次

    谈起软件开发一定会想到用什么技术.采用什么框架,然而在盛行的敏捷之下,人的问题逐渐凸显出来.不少企业请人来培训敏捷开发技术,却发现并不能真正运用起来,其中一个主要原因就是大家还没有很好的学习能力.没有 ...

  2. IT人的自我导向型学习:学习的3个维度

    看到大家对我的文章赞了不少,看来大家还比较喜欢看.园子里的一些朋友和我说:”终于又看到你要在园子里发原创文章了.几年前就受益匪浅,经过几年的成长分享来的东西肯定也是精品.“ 感谢大家对我的信任,如果你 ...

  3. Deep Learning(深度学习)学习笔记整理系列之(五)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  4. Deep Learning(深度学习)学习笔记整理系列之(八)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  5. Deep Learning(深度学习)学习笔记整理系列之(七)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  6. Deep Learning(深度学习)学习笔记整理系列之(六)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  7. Deep Learning(深度学习)学习笔记整理系列之(四)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  8. Deep Learning(深度学习)学习笔记整理系列之(三)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  9. Deep Learning(深度学习)学习笔记整理系列之(二)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  10. Deep Learning(深度学习)学习笔记整理系列之(一)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0  2013-0 ...

随机推荐

  1. Java 加载、编辑和保存WPS表格文件(.et/.ett)

    WPS表格文件是金山开发的专门用于处理表格数据的Office工具,属于WPS Office中WPS文字.WPS表格和WPS演示三大功能模块之一.通常以.et和.ett作为文件后缀.我们在通过后端来操作 ...

  2. 使用 Loki 微服务模式部署生产集群

    转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247500523&idx=1&sn=0994af2b50 ...

  3. centos7安装sonarqube-9.2.4

    官方文档地址:https://docs.sonarqube.org/latest/requirements/requirements/ 使用 sonarqube 对 java 项目代码进行扫描的时候, ...

  4. python中限定导入的子模块

    如果包定义文件__init__.py中存在一个叫做__all__的列表变量,那么在使用from package import *的时候就把这个列表中的所有名字作为要导入的模块名. 例如在example ...

  5. 使用 febootstrap 制作自定义基础镜像

    转载自:https://cloud.tencent.com/developer/article/1454524 文章目录1.febootstrap 介绍2.环境.软件准备3.febootstrap 安 ...

  6. css文字超出后显示...

    多行 overflow: hidden; //超出的文本隐藏 text-overflow: ellipsis; //溢出用省略号显示 display: -webkit-box; -webkit-lin ...

  7. Apollo 中配置String、Map和List和默认值

    摘要:在Apollo 中,配置String.Map和List等类型的信息,同时设置默认值. 综述   随着业务需求的变更,需要在Apollo中配置一个Map<String, List>类型 ...

  8. Ruoyi字典源码学习

    此文章属于ruoyi项目实战系列 使用目的 什么是字典数据:具体的值(0,1,"Y","N"),对应具体的业务逻辑("男","女& ...

  9. Java学生管理系统(详解)

    相信大部分人都有接触过这个 Java 小项目--学生管理系统,下面会分享我在做这个项目时的一些方法以及程序代码供大家参考(最后附上完整的项目代码). 首本人只是个初学Java的小白,可能项目中有许多地 ...

  10. Doris开发手记4:倍速性能提升,向量化导入的性能调优实践

    最近居家中,对自己之前做的一些工作进行总结.正好有Doris社区的小伙伴吐槽向量化的导入性能表现并不是很理想,就借这个机会对之前开发的向量化导入的工作进行了性能调优,取得了不错的优化效果.借用本篇手记 ...