[.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 ...
随机推荐
- std:move() 作用 和 移动语义后 右值行为,unique_ptr的"移动"操作问题
unique_ptr 不能进行赋值操作,但是可以有返回unique_ptr的函数,由此产生的问题: 结论1:std:move() 只是将一个实参强行转换为右值引用. 我们知道对象初始化时有 构造函数, ...
- Django 测试脚本
一.测试脚本 Django 在创建项目时自动在应用下创建了tests.py,这个py文件可以作为测试文件:也可以在应用下手动创建一个py测试文件. 无论哪种方式,都需要提前书写以下代码. from d ...
- Beats:通过Metricbeat实现外部对Elastic Stack的监控
- service的dns记录
当您创建一个 Service 时,Kubernetes 为其创建一个对应的 DNS 条目.该 DNS 记录的格式为 ..svc.cluster.local,也就是说,如果在容器中只使用 ,其DNS将解 ...
- python推导式特殊用法
字典推导式 >>> dic = {x: x**2 for x in (2, 4, 6)} >>> dic {2: 4, 4: 16, 6: 36} >> ...
- Java 泛型程序设计
1. 泛型类 public class Pair<T> { private T first; private T second; public void setSecond(T seco ...
- 引入Wukong让你的系统瞬间具备IOC能力
[Github源码] 本文重点要说的是如何通过引入Wukong第三方包让自己的系统能够拥有IOC容器能力,但在具体讲解步骤之前,还是想先简单的介绍一下什么是IOC以及它存在的意义:同时也就能清楚Wuk ...
- 我的 Kafka 旅程 - 文件存储机制
存储机制 Topic在每个Broker下存储所属的Partition,Partition下由 Index.Log 两类文件组成. 写入 Log 由多个Segment文件组成,每个Segment文件容量 ...
- JSP实现登录删除添加星座等(带样式)
功能要求 1.完成两个页面 2.第一个登陆页面login. jsp 3.第二个用户管理页面useManage. jsp 4.有登录功能(能进行用户名密码的校验,用户名若为自己的学号密码为班级号,允许登 ...
- 规则引擎深度对比,LiteFlow vs Drools!
前言 Drools是一款老牌的java规则引擎框架,早在十几年前,我刚工作的时候,曾在一家第三方支付企业工作.在核心的支付路由层面我记得就是用Drools来做的. 难能可贵的是,Drools这个项目在 ...