杨中科 EFCORE 第四部分 命令详解56-61

Migrations

深入研究Migrations

1、使用迁移脚本,可以对当前连接的数据库执行编号更高的迁移,这个操作叫做“向上迁移” (Up),也可以执行把数据库回退到旧的迁移,这个操作叫“向下迁移(Down)
2、除非有特殊需要,否则不要删除Migrations文件夹下的代码。
3、进一步分析Migrations下的代码。分析Up、Down等方法。查看Migration编号。4、查看数据库的_EFMigrationsHistory表: 记录当前数据库曾经应用过的迁移脚本,按顺序排列

示例:
程序结构

Person 类

在这里插入图片描述

PersonConfig

在这里插入图片描述

MyDbContext

在这里插入图片描述
在这里插入图片描述

主程序类
在这里插入图片描述

运行:
在这里插入图片描述

此时查看 Migrations下生成的文件
在这里插入图片描述

发现文件中有两个 方法 分别是 up 和 down
up 方法是创建过程 向上迁移

在这里插入图片描述

down 是向下迁移 up创建了表 ,会滚的话 就是删除表

在这里插入图片描述

此时若是增加一列
在这里插入图片描述

执行命令(在实际开发中,不能操作过于频繁)

在这里插入图片描述

此时,Migrations文件中,新增了一个脚本 up方法中的内容也发生了改变,是增加一列
(文件前面的编号内容也在增大)
在这里插入图片描述

此时的向下迁移 down 方法
则是删除该列
在这里插入图片描述

执行 Update-Database

在这里插入图片描述

查看数据库内容

在这里插入图片描述

查看EFMigrationsHistory

在这里插入图片描述
ProductVersion : EFCORE 版本
MigrationsId : 显示数据库都执行了哪些脚本

这个表 是由EFCORE 维护

若估计删除表中一行记录
在这里插入图片描述
然后执行update-database
在这里插入图片描述
出现报错信息
在这里插入图片描述

列重复。

数据库其他迁移命令

Migrations其他命令

1、Update-Database XXX把数据库回滚到XXX的状态,迁移脚本不动
2、Remove-migration删除最后一次的迁移脚本
3、Script-Migration
生成迁移SQL代码。有了Update-Database 为什么还要生成SOL脚本。
可以生成版本D到版本F的SOL脚本:Script-Migration D F
生成版本D到最新版本的SOL脚本: Script-Migration D

Update-Database XXX

示例:
删除数据库
在这里插入图片描述

执行 Update-Database
在这里插入图片描述

此时数据直接到 AddHeight 版本
在这里插入图片描述
使用 Update-Database xx 尝试还原到上一个版本
在这里插入图片描述

刷新数据库,发现还原成功
在这里插入图片描述

表中记录也减少一条
在这里插入图片描述

再次 执行 删除数据库操作。
此时需要达到 只执行到Init 状态,不执行到 add height
在这里插入图片描述
测试成功
在这里插入图片描述

Remove-migration

为了防止不小心 删除了 破环了前后关系,最好不要手动删除迁移脚本
而是使用 Removing 命令 删除最近一次记录
在这里插入图片描述

Script-Migration

在这里插入图片描述

此时在编辑器 中打开了一个sql文件

在这里插入图片描述
这样的目的 是在项目上线后,修改数据时,能更直观的看到如何修改得数据库 ,防止不小心的操作破坏生产环境

生成中间版本 到某个版本的迁移脚本
在这里插入图片描述
sql脚本
在这里插入图片描述
再把该代码 复制到数据库中运行
在这里插入图片描述

结果:

在这里插入图片描述

Script-Migration D 生成某个版本到最新版本的数据迁移记录
在这里插入图片描述

EFCORE 反向工程

反向工程

I、根据数据库表来反向生成实体类
2、Scaffold-DbContext ‘Server=.;Database=demol;Trusted_Connection=True;MultipleActiveResultSets=true’
Microsoft.EntityFrameworkCore.SqlServer

开发一个项目,但这个项目已经有了一些数据库。这个时候可以考虑使用反向工程

示例:
新建数据库
在这里插入图片描述

新建表
在这里插入图片描述
命令输入执行
在这里插入图片描述
此时项目中自动生成了 Dbcontext 和 Person 类
在这里插入图片描述
在这里插入图片描述

注意

1、生成的实体类可能不能满足项目的要求,可能需要手工修改或者增加配置。
2、再次运行反向工程工具,对文件所做的任何更改都将丢关
3、不建议把反向工具当成了日常开发工具使用,不建议DBFirst.

FECORE 底层如何操作数据库

Know How

1、为什么需要了解EF Core底层原理
框架是简化操作,不是让程序员变成傻瓜

在这里插入图片描述

EFCORE 底层就是靠 ADO.NETCORE来操作的
在这里插入图片描述

原理:

在这里插入图片描述

查看生成的SQL语句

1、SOL Server Profiler(收费版才有)查看SOLServer数据库当前执行的SQL语句。
在这里插入图片描述
查询窗口执行过的sql 语句 在SQL Server Perfiler 就能监控到
在这里插入图片描述

在这里插入图片描述
代码方式

在这里插入图片描述
在这里插入图片描述

2、var books = ctx.Books.Where(b =>b.Price > 10 b.Title.Contains(“张”));

EF Core把C#代码转换为SQL语句的框架

EFCORE 有哪些做不到的事情

Why

1、C#千变万化;SQL功能简单。存在合法的C#语句无法被翻译为SQL语句的情况

var books = ctx.Books.Where(b => IsOK(b.Title));
private static bool IsOK(string s)
{
	return s.Contains("张");
}

示例:
在这里插入图片描述
在这里插入图片描述
语句成功被翻译成为sql
在这里插入图片描述
修改代码
完全可以编译通过的合法sql 语句
在这里插入图片描述
报错,该Linq 表达式 无法被翻译为sql
在这里插入图片描述
sqlseverprofiler中也没有记录
在这里插入图片描述

在这里插入图片描述

通过代码查看EFCORE 生成的SQL

Why

不是有SQL Server Profiler了吗?
SQL Server Profiler 是查看服务器上所有的SQL 语句,多人操作。

方法1: 标准日志

public static readonly ILoggerFactory
MyLoggerFactory
= LoggerFactory.Create(builder => builder.AddConsole(););
optionsBuilder.UseLoggerFactory(MyLoggerFactory);

示例:
nuget 查找 logging console
在这里插入图片描述
在这里插入图片描述
编写代码
在这里插入图片描述
在这里插入图片描述
运行:
在这里插入图片描述

方法2:简单日志

optionsBuilder.LogTo(Console.WriteLine):
可以自己写代码过滤一些不需要的消息

示例:
在这里插入图片描述

运行结果:

在这里插入图片描述
只输出跟sql语句相关的东西
在这里插入图片描述
运行结果:
在这里插入图片描述

好处:可以看到更细节的东西,不用引入logging的框架

方法3: TOQUERYSTRING

1、上面两种方式无法直接得到一个操作的SQL语句,而且在操作很多的情况下,容易混乱。(需要精确查看自己想看的sql)
2、EF Core的Where方法返回的是IQueryable类型, DbSet也实现了IQueryable接口。 IQueryable有扩展方法ToQueryString0可以获得SQL
3、不需要真的执行查询才获取SOL语句:只能获取查询操作的。

示例:
在这里插入图片描述
运行:
在这里插入图片描述
【总结】
写测试性代码,用简单日志; 正式需要记录SQL给审核人员或者排查故障,用标准日志;开发阶段,从繁杂的查询操作中立即看到SQL,用ToQueryString()。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/321090.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32F103_ESP8266基于RTOS移植MQTT

STM32F103_ESP8266基于RTOS移植MQTT 目录 STM32F103_ESP8266基于RTOS移植MQTT一、准备工作二、移植mqttclient代码三、编译包含mqttclient的工程四、编写ESP8266驱动程序1、ESP8266 AT命令代码框架2、UART硬件和抽象层相关代码3、AT命令发送和解析代码4、plat_sock网络层相关代…

Python+甘特图及标签设置

图示 甘特图代码 import matplotlib.pyplot as plt import numpy as npclass ProjectEmement:def __init__(self, name_, starttime_: float, endtime_: float, fact_endtime_: float, grade_, rootlist_: list, keylist_: list, isover_=-1):self.name = name_self.starttime…

使用VS2015在win7 x64上编译调试FFmpeg(附源码和虚拟机下载)

1. 前言 在文章《使用VS2017在win10 x64上编译调试FFmpeg(附源码和虚拟机下载)》中,我们在win10VS2017的环境下基于开源项目ShiftMediaProject完成了FFmpeg源码调试环境的配置。在win7VS2015的环境下,ShiftMediaProject配置过程和…

苏州倍丰智能新型雾化粉末技术量产成功!金属3D打印全产业链更进一步

苏州倍丰智能深耕金属3D打印技术领域,以金属3D打印全产业链为目标,围绕金属3D打印设备,涵盖包括金属粉末前后处理设备、金属粉末原材料制备、先进工艺研发等多个领域,完成了一整条自上而下的金属3D打印全产业链。 近日&#xff0c…

计算日期到天数转换

根据输入的日期,计算是这一年的第几天。 保证年份为4位数且日期合法。 本题对三个输入数字依次使用,由年份可得到闰年或平年,故分为两种计算。 在月份中,由于每月天数不好找规律,故分为1—2月,3—7月&am…

苹果手机IOS软件应用IPA砸壳包提取完整教程

我们有很多小伙伴可能想要获取到苹果手机软件的安装包但又不知该如何获取,本文就教你如何获取到IOS软件的IPA砸壳包 首先我们需要准备一台越狱的苹果IOS设备,如果不知如何越狱的可以参考这篇苹果手机越狱教程:https://www.hereitis.cn/artic…

使用setdefault撰写文本索引脚本(出自Fluent Python案例)

背景介绍 由于我们主要介绍撰写脚本的方法,所以用一个简单的文本例子进行分析 a[(19,18),(20,53)] Although[(11,1),(16,1),(18,1)] ambiguity[(14,16)] 以上内容可以保存在一个txt文件中,任务是统计文件中每一个词(包括字母,数…

Linux------进程的初步了解

目录 一、什么是进程 二、进程的标识符pid 三、getpid 得到进程的PID 四、kill 终止进程 五、父进程与子进程 六、目录中的进程 一、什么是进程 在windows中,我们查看进程很简单,打开任务管理器,就可以看到在运行的进程。这里我们还可以…

红队专题-反序列化攻击-Tools-Ysoserial

Ysoserial 招募六边形战士队员ysoserial-0.0.6-SNAPSHOT-all.jarysoserial的原生CB1的链CC6链在ysoserial编写自己的payload ysoserial.net前言 参考文章 招募六边形战士队员 一起学习 代码审计、安全开发、web攻防、逆向等。。。 私信联系 ysoserial-0.0.6-SNAPSHOT-all.ja…

POI-tl 知识整理:整理2 -> 标签

1 文本标签 {{var}} 数据模型: String :文本 TextRenderData :有样式的文本 HyperlinkTextRenderData :超链接和锚点文本 Object :调用 toString() 方法转化为文本 代码示例: Testpublic void testText…

Brc20钱包横评推荐:谁更适合玩铭文?

加密货币的世界越来越热闹,新的创意层出不穷!最近,BRC-20 通证标准成了这个圈子的新宠儿,这是在比特币网络上诞生的一种超酷的新型可替代通证。和以太坊的 ERC-20 通证一样牛,但 BRC-20 通证是 Ordinals 协议的杰作&am…

spring boot application yaml key下划线如何转java的Properties对象字段驼峰

spring boot yaml key和value如何映射到Properties对象 下面以MybatisPlusProperties为例 ##java properties 字段驼峰 ##yaml文件如图,key使用下划线 ##java对象驼峰转下划线匹配yaml文件key DataObjectPropertyName.toDashedForm(name);//驼峰转下划线 ##设置P…

ES自动补全

安装IK分词器 要实现根据字母做补全,就必须对文档按照拼音分词。在GitHub上恰好有elasticsearch的拼音分词插件。地址:GitHub - medcl/elasticsearch-analysis-pinyin: This Pinyin Analysis plugin is used to do conversion between Chinese characte…

【神经网络算子】

神经网络算子(1)——DeepONet介绍 AI与PDE(三):大概是最好懂的DeepONet模型解析 算子把函数映射为函数。 输入函数u,在固定的sensors上:x_1,x_2,…,x_m。即u(x_i)和y。 输出函数G(u),在随机的y上。即G(u)(…

HUAWEI华为MateStation S台式机电脑12代PUC-H7621N,H5621N原装出厂Windows11.22H2系统

链接:https://pan.baidu.com/s/1QtjLyGTwMZgYiBO5bUVPYg?pwd8mx0 提取码:8mx0 原厂WIN11系统自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志、Office办公软件、华为电脑管家等预装程序 文件格式:esd/wim/swm 安装方式&#xf…

大模型实战05——LMDeploy大模型量化部署实践

大模型实战05——LMDeploy大模型量化部署实践 1、大模型部署背景 2、LMDeploy简介 3、动手实践环节——安装、部署、量化 注 笔记内容均为截图 笔记课程视频地址:https://www.bilibili.com/video/BV1iW4y1A77P/?spm_id_from333.788&vd_source2882acf8c823ce…

Costco攻入山姆大本营

01 Costco深圳店开业火爆 “我今天不去Costco,早上还没开业,路上就已经堵车了,看来今天人很多,过几天再去”,原本计划在Costco开业当天去逛逛的张芸(化名)无奈只能放弃。 家住在Costco深圳店旁…

基于Java SSM框架实现医院管理系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现医院管理系统演示 SSM框架 当今流行的“SSM组合框架”是Spring SpringMVC MyBatis的缩写,受到很多的追捧,“组合SSM框架”是强强联手、各司其职、协调互补的团队精神。web项目的框架,通常更简单的数据源。Spring属于…

【算法】了解哈希表/思想 并用哈希解算法题(C++)

文章目录 基本了解解题1.两数之和面试题01.02.判定是否互为字符重排217.存在重复元素219.存在重复元素II49.字母异位词分组 基本了解 哈希表是什么? 一种数据结构,用于存储元素。 有什么用? 用于快速查找元素 与 插入 何时用哈希表&…

最大公约数和最小公倍数

1. 最大公约数 给定两个整数,求这两个数的最大公约数 暴力求解: 从较小的那个数开始,依次递减,直到某个数能够同时被整除 //暴力求解 int main() {int a 0;int b 0;scanf("%d %d", &a, &b);int i 0;int min …