C#使用实体类Entity Framework Core操作mysql入门:从数据库反向生成模型

news2024/9/24 13:22:44

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。

源码指引:github源码指引_初级代码游戏的博客-CSDN博客


        实体框架 EntityFramework,EF,是操作大量数据库表的最快捷开发方式。EntityFrameworkCore是EntityFramework5.x、6.x的替代(但是无法升级,我们已经习惯了被微软坑)。

        本文演示如何使用Visual Studio 2022创建EntityFrameworkCore来操作mysql数据库。

目录

一、安装依赖项

二、从数据库生成模型(反向)

2.1 程序包管理器控制台

2.2 执行创建命令

三、执行代码读取并遍历数据

四、解决生成出错


一、安装依赖项

        用nuget给项目安装如下依赖项(这些依赖项本身互相依赖,可以自动安装被依赖的项目,但是必须单独安装才会检查更新) :

MySql.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Relational
Microsoft.EntityFrameworkCore

        其中第一个“MySql.EntityFrameworkCore”是针对mysql的特定功能的实现(每种数据库都有一个对应的包),来自Oracle公司,也就是mysql的母公司,所以这个是官方版本。其余都是来自微软公司,是公共基础功能。

        注意一下安装的版本,我安装的时候除了第一个是8.0.5外其余都是8.0.8,公共基础部分版本必须一致。

二、从数据库生成模型(反向)

        因为大部分情形数据库是在编写代码之前设计并生成的,所以我们需要从已有的数据库生成模型,这需要使用一个奇怪的命令:Scaffold-DbContext。

        其实就是执行命令行。

2.1 程序包管理器控制台

        打开程序包管理器控制台,只能从VS的菜单打开:【工具】-【NuGet包管理器】-“程序包管理器控制台”:

        打开之后是这样:

        如果解决方案包含多个项目,需要手工选择默认项目(并没有自动选择当前项目),然后必须把鼠标点在提示符“PM>”后面才能输入或粘贴内容。

2.2 执行创建命令

        命令格式如下:

Scaffold-DbContext "server=地址;userid=用户名;pwd=密码;port=3306;database=库名;sslmode=none;allowPublicKeyRetrieval=true;" MySql.EntityFrameworkCore -OutputDir Models -Force

        第一个参数是连接字符串,内容很容易理解。注意一下“allowPublicKeyRetrieval=true;”,缺少这个可能会遇到报错“Retrieval of the RSA public key is not enabled for insecure connections.”。

        第二个参数是用来访问mysql的包的名字。

        再往后的参数就很容易理解了。 

        执行完毕会看到项目里面生成了Models目录,下面有几个文件:

  • 库名Context.cs,总入口,数据库上下文类,里面有每个数据表对象
  • 表名.cs,每个表一个,对应表结构

        文件内容都很简单,打开看一下就明白了。最困难的部分都隐藏在上下文对象的基类DbContext里面了。

三、执行代码读取并遍历数据

        下面是全部的执行代码:

			{
				using var db = new 库名Context();
				var records=db.表名;
				foreach (var item in records)
				{
					Log(item.col1);
				}
            }

        就这么几句就完成了连接数据库、读取表数据、遍历数据的功能。

        确实比手写强多了。

四、解决生成出错

        重复生成模型的时候可能会出错,经常难以理解,尝试一些方法后发现出错原因很简单:生成之前要分析代码,代码有错就会失败(因为看不到信息,所以这是推断的)。因为数据库改动比较大,我习惯删掉整个模型目录,所以代码一定无法编译。

        解决方法也很简单:建立一个独立C#类库项目和解决方案,这样就不可能遇到代码错误了。其他项目引用这个项目就可以了。


(这里是文档结束)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何构建出更好的大模型RAG系统?

ChatGPT爆火之后,以ChatPDF为首的产品组合掀起了知识库问答的热潮。 在过去一整年中,大多数人都在完成RAG系统到高级RAG系统的迭代升级。但是技术发展是迅速的,如何深入了解RAG的发展,做出更好的RAG系统,其实还是非常…

32岁前端干了8年,是继续做前端开发,还是转其它工作_ui设计师转开发

前端发展有瓶颈,变来变去都是那一套,只是换了框架换了环境。换了框架后又得去学习,虽然很快上手,但是那些刚毕业的也很快上手了,入门门槛越来越低,想转行或继续卷,该如何破圈? 这是一位网友的自…

使用SBP打AssetBundle时脚本引用丢失

1)使用SBP打AssetBundle时脚本引用丢失 2)在UE 5.3中连接Power节点为何10的3次幂等于1009 3)如何在Widget中倾斜一张纹理贴图 4)如何在打开关卡蓝图时更改游戏模式 这是第401篇UWA技术知识分享的推送,精选了UWA社区的热…

uni-app快速入门

目录 一、什么是 uni-app二、快速创建 uni-app 项目1.创建 uni-app2.运行 uni-app 三、uni-app 相对传统 H5 的变化1.网络模型的变化2.文件类型变化3.文件内代码架构的变化4.外部文件引用方式变化5.组件/标签的变化6.js的变化(1)运行环境从浏览器变成v8引…

MCU自动测量单元采集振弦式应变计测值的过程

振弦式应变计是一种广泛应用于土木工程、地质勘探等领域的高精度传感器,用于测量结构的应变变化。近年来,随着微控制器单元(MCU)的发展,自动化测量技术得到了极大的提升,使得振弦式应变计的测值采集更加高效和精确。本文将详细介绍…

关于 mybatis-plus-boot-starter 与 mybatis-spring-boot-starter 的错误

不是知道你是否 出现过这样的错误 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 经过各种度娘,无非就是让你检查三种情况 情况一:mapper.xml没有按照传统的maven架构进行放置 情况二:mybatis的配置信…

C语言实现简单凯撒密码算法

**实验2:传统密码技术 【实验目的】 通过本次实训内容,学习常见的传统密码技术,通过编程实现简单代替密码中的移位密码算法,加深对传统密码技术的了解,为深入学习密码学奠定基础。【技能要求】 分析简单代替密码中的移…

R语言机器学习遥感数据处理与模型空间预测技术及实际项目案例分析

随机森林作为一种集成学习方法,在处理复杂数据分析任务中特别是遥感数据分析中表现出色。通过构建大量的决策树并引入随机性,随机森林在降低模型方差和过拟合风险方面具有显著优势。在训练过程中,使用Bootstrap抽样生成不同的训练集&#xff…

LeetCode 每日一题 ---- 【2207. 字符串中最多数目的子序列】

LeetCode 每日一题 ---- 【2207. 字符串中最多数目的子序列】 2207.字符串中最多数目的子序列方法:贪心 一次遍历 2207.字符串中最多数目的子序列 方法:贪心 一次遍历 从题意中可以看出来,对于 pattern.charAt(0) 一定是插入到最左侧是最优…

什么是SSL证书?它能保护你的网络安全!

相信大家在浏览网页时经常会看到一些网址前面有个“小锁”图标,它代表的网站是安全的,而这背后的秘密就是SSL证书。那SSL证书到底是什么?它有什么用呢? 什么是SSL证书? SSL证书的全称是Secure Sockets Layer证书&…

php发送邮箱教程:如何实现邮件发送功能?

php发送邮箱性能优化策略?怎么使用PHPMail发送邮箱? 无论是用户注册验证、密码重置,还是系统通知,邮件发送都是不可或缺的一部分。AokSend将详细介绍如何使用PHP实现邮件发送功能,帮助开发者快速掌握这一技能。 php发…

高效驱动,掌控动力:TB67H400AFNG 马达驱动器

在如今智能设备和自动化应用领域中,驱动器的性能直接决定了系统的可靠性与效率。东芝的TB67H400AFNG有刷直流马达驱动器凭借其卓越的性能,成为众多行业解决方案中的关键部件。无论是工业控制、自动化设备还是消费类电子产品,TB67H400AFNG都能…

一小时拿下鸿蒙应用开发者高级证书!(二)

鸿蒙应用开发者高级认证,是华为自家研发的硬核操作系统,现在它在市场上的名声也越来越响亮。你手上要是有了鸿蒙的认证小本本,那就等于是掌握了这行里的独门秘籍,找工作的时候,妥妥的加分项。 一个小时刷刷题&#xf…

玩机进阶教程----MTK芯片杂牌机 小品牌机型以及其他mtk设备导出分区的另外一种方法解析

在前面多期博文中都是通过工具来导出分区 制作线刷包的。今天我们以另外一种方法备份系统分区。mtk芯片较多。具体机型适合哪种方法需要自测。多种方法多条思路。遇到机型善用工具。目前一些wifi网卡 点读笔以及有些其他mtk芯片设备。通常分区都较小。可以参考教程 通过教程了…

amr文件怎么转换成mp3?这几种方法超多人在用!

amr文件怎么转换成mp3?AMR音频格式,作为音频领域的一个相对边缘角色,其应用范围相对狭窄,这背后深藏着多重内在限制,首要挑战在于AMR的音质瓶颈,它难以逃脱声音失真与杂音干扰的阴影,这对于追求…

通过企业微信群机器人 发送群消息

1、添加群机器人,复制的webhook地址 2、 public static void main(String[] args) { String reqUrl "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key6xdexxxxxxxxxxxxxxxxxxxxxxxxxxx"; String title "填…

数据结构 - 查找算法

一.查找的概念 二.顺序表查找 特点: 1.记录的数据可以是无序的 2.当数据量较大时,查找效率低,需要依次遍历 /*** description: 顺序表查找算法,从后往前查找* param - a : 要操作的数组的指针* param - k…

OpenCV_自定义线性滤波(filter2D)应用详解

OpenCV filter2D将图像与内核进行卷积,将任意线性滤波器应用于图像。支持就地操作。当孔径部分位于图像之外时,该函数根据指定的边界模式插值异常像素值。 卷积核本质上是一个固定大小的系数数组,数组中的某个元素被作为锚点(一般…

安霸cv22平台移植采坑记录

主要分为3部分: 1.数据输入部分: 1.因原始测试代码只是单张测试图片(测试格式:安霸平台离线转的bin文件),现在的问题是:如何输入数据流?会不会涉及到字节对齐问题,如何…

ROS第六梯:ROS+VSCode+C++消息发布和订阅

第一步:创建ROS工作空间,并在工作空间下创建名为srr_pkg的功能包,具体步骤参考第二章。 第二步:在src下创建publisher.cpp作为发布节点代码文件,创建subscriber.cpp作为订阅节点代码文件: 主要步骤是&#…