[.NET学习] EFCore学习之旅 -1
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的更多相关文章
- IT人的自我导向型学习:学习的4个层次
谈起软件开发一定会想到用什么技术.采用什么框架,然而在盛行的敏捷之下,人的问题逐渐凸显出来.不少企业请人来培训敏捷开发技术,却发现并不能真正运用起来,其中一个主要原因就是大家还没有很好的学习能力.没有 ...
- IT人的自我导向型学习:学习的3个维度
看到大家对我的文章赞了不少,看来大家还比较喜欢看.园子里的一些朋友和我说:”终于又看到你要在园子里发原创文章了.几年前就受益匪浅,经过几年的成长分享来的东西肯定也是精品.“ 感谢大家对我的信任,如果你 ...
- Deep Learning(深度学习)学习笔记整理系列之(五)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(八)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(七)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(六)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(四)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(三)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(二)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(一)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-0 ...
随机推荐
- k8s 中的 Pod 细节了解
k8s中Pod的理解 基本概念 k8s 为什么使用 Pod 作为最小的管理单元 如何使用 Pod 1.自主式 Pod 2.控制器管理的 Pod 静态 Pod Pod的生命周期 Pod 如何直接暴露服务 ...
- Beats:如何使用Winlogbeat
- http和https分别是什么?
http中文名:超文本传输协议英文名:Hyper Text Transfer Protocol解释:是一个简单的请求-响应协议,它通常运行在TCP之上.它指定了客户端可能发送给服务器什么样的消息以及得 ...
- 浅谈 Golang 插件机制
我们知道类似 Java 等半编译半解释型语言编译生成的都是类似中间态的字节码,所以在 Java 里面我们想要实现程序工作的动态扩展,可以通过 Java 的字节码编辑技术([[动态代理#ASM]]/[[ ...
- day47-JDBC和连接池03
JDBC和连接池03 8.事务 8.1事务介绍 基本介绍 JDBC程序中当一个Connection对象创建时,默认情况下是自动提交事务:每次执行一个SQL语句时,如果执行成功,就会向数据库自动提交,而 ...
- Pytest进阶使用
fixture 特点: 命令灵活:对于setup,teardown可以省略 数据共享:在conftest.py配置里写方法可以实现数据共享,不需要import导入,可以跨文件共享 scope的层次及神 ...
- Invalid bound statement (not found)出现原因和解决方法
Invalid bound statement (not found)出现原因和解决方法 前言: 想必各位小伙伴在码路上经常会碰到奇奇怪怪的事情,比如出现Invalid bound statement ...
- 十八、Service的应用
Service 的应用 ClusterIP clusterIP 主要在每个 node 节点使用 ipvs,将发向 clusterIP 对应端口的数据,转发到 kube-proxy 中.然后 kube ...
- 研发效能|DevOps 已死平台工程永存带来的焦虑
最近某位大神在推特上发了一个帖子,结果引来了国内众多卖课机构.培训机构的狂欢,开始贩卖焦虑,其实「平台工程」也不是什么特别高深莫测的东西.闲得无聊,把这位大神的几个帖子薅了下来,你看过之后就会觉得没啥 ...
- packet Capture 手机抓包工具
packet Capture packet Capture 是一款免root的app, 运行在安卓平台上,用于捕获http/https网络流量嗅探的应用程序 特点: 捕获网络数据包,并记录太慢,使用中 ...