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

初级代码游戏的专栏介绍与文章目录-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.mzph.cn/diannao/54622.shtml

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

相关文章

matlab恢复默认窗口布局

1.点击主页,选择布局 2.选择默认,即可恢复到默认的窗口布局

LIN总线CAPL函数—— 设置LIN报文字节间隔长度(linSetInterByteSpace)

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…

利士策分享,如何培养良好的工作习惯?

利士策分享,如何培养良好的工作习惯? 在这个快节奏、高压力的职场环境中,培养良好的工作习惯不仅关乎个人职业发展的顺畅度, 更是提升工作效率、保持身心健康的关键。 以下是一些实用的建议,帮助你在日常工作中逐步构…

大语言模型量化方法GPTQ、GGUF、AWQ详细原理

大语言模型量化的目的是减少模型的计算资源需求和存储占用,同时尽量保持模型的性能。以下是几种常见的量化方法的原理; 1. GPTQ (Gradient-based Post-training Quantization) GPTQ 是一种基于梯度的后训练量化方法,主要目的是在减少浮点计…

macOS 系统中python的安装步骤

访问Python官网: 打开浏览器,访问Python的官方网站(https://www.python.org/)。 下载Python安装包: 在官网首页找到“Downloads”链接,点击进入下载页面。选择适用于macOS的安装包。在撰写本文时&#xff…

智慧水利采砂船在线监控平台:构建高效、智能的河道采砂监管体系

随着科技的不断发展,水利行业的智慧化转型也日益受到重视。智慧水利采砂船在线监控平台便是这一转型的重要成果之一。该平台主要服务于水政执法人员,针对取得河道采砂许可证的采砂公司及采砂船,实施在线自动监控,旨在提高监管效率…

Ubuntu USB设置别名

在 Ubuntu 中,可以通过创建 udev 规则为 USB 设备设置别名。这样你可以通过自定义的别名访问设备,而不是使用随机分配的设备节点(例如 /dev/ttyUSB0)。 1. 确认设备信息 首先,你需要找到设备的相关信息&#xff08…

linux 内存屏障(barrier)分析

谈起内存屏障,大家感觉这个"玩意儿"很虚,不太实际,但是内核代码中又广泛地可以看到起身影。内存屏障,英文barrier,这个"玩意儿"它还不太好去定义它。barrier,中文翻译为栅栏,栅栏大家都见过,现实生活中就是防止他人或者动物非法闯入而用来进行隔…

iptables限制网速

1、使用hashlimit来限速 #从eth0网卡进入INPUT链数据,使用模块hashlimit 限制网速为100kb/s或2mb/s,超过限制的数据包会被DROP。OUTPUT链同理,mode为srcip,有4个mode选项: srcip(默认匹配每个源地址IP,配置指定源地址…

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【上篇】

【STM32开发笔记】移植AI框架TensorFlow【上篇】 一、TFLM是什么?二、TFLM开源项目2.1 下载TFLM源代码2.2 TFLM基准测试说明2.3 TFLM基准测试命令 三、TFLM初步体验3.1 PC上运行Keyword基准测试3.2 PC上运行Person detection基准测试3.3 No module named numpy问题解…

保障电气安全的电气火灾监控系统主要组成有哪些?

电气火灾是什么? 电气火灾一般是指由于电气线路、用电设备、器具以及供配电设备出现故障性释放的热能:如高温、电弧、电火花以及非故障性释放的能量;如电热器具的炽热表面,在具备燃烧条件下引燃本体或其他可燃物而造成的火灾&…

递归基础训练-路径总和

路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 我们可以把之前的…

docker在基础镜像上,比如rockylinux,如何配置yum仓库

在基础镜像rockylinux上 启动的容器,没有yum仓库,就执行不了一些命令 ~]docker run -itd --name linux rockylinux:8.5~]# docker exec -it linux bash /]# ifconfig bash: ifconfig: command not found/]# vim bash: vim: command not found …

计算机组成原理(笔记4)

定点加减法运算 补码加法&#xff1a; 补码减法&#xff1a; 求补公式&#xff1a; 溢出的概念 在定点小数机器中,数的表示范围为|&#xff58;|<1。在运算过程中如出现大于1的现象,称为 “溢出”。 上溢&#xff1a;两个正数相加&#xff0c;结果大于机器所能表示的最…

20240923软考架构-------软考186-190答案解析

每日打卡题186-190答案 186、Mesh 化架构是把&#xff08; &#xff09;从业务进程中分离&#xff0c;分离后在业务进程中只保留很“薄”的Client部分&#xff0c;Client 通常很少变化&#xff0c;只负责与 Mesh进程通信&#xff0c;原来需要在SDK中处理的流量控制、安全等逻辑…

数据结构-线性表的单链式存储结构图解及C语言实现

概念 链式存储&#xff1a;结点在存储器中的位置是任意的&#xff0c;即逻辑相邻的数据元素在物理上不一定相邻 链式存储结构也称非顺序映像或链式映像 图解 链式存储结构中结点一般有两个部分组成&#xff0c;即数据域(data)和指针域&#xff0c;数据域是用于存放数据的&…

开源ids snort (windows版)

Snort-IPS-on-Windows-main资源-CSDN文库 GitHub - eldoktor1/Snort-IPS-on-Windows: A comprehensive guide to installing and configuring Snort IPS on Windows, ensuring robust network security 手动打造Snortbarnyard2BASE可视化告警平台 - FreeBuf网络安全行业门户 …

JavaWeb--小白笔记07:servlet对表单数据的简单处理

这里的servlet对表单数据的处理是指使用IDEA创建web工程&#xff0c;再创建html和class文件进行连接&#xff0c;实现html创建一个表单网页&#xff0c;我们对网页中的表单进行填充&#xff0c;可以通过class文件得到网页我们填充的内容进行打印到控制台。 一登录系统页面---h…

Linux网络之UDP与TCP协议详解

文章目录 UDP协议UDP协议数据报报头 TCP协议确认应答缓冲区 超时重传三次握手其他问题 四次挥手滑动窗口流量控制拥塞控制 UDP协议 前面我们只是说了UDP协议的用法,但是并没有涉及到UDP协议的原理 毕竟知道冰箱的用法和知道冰箱的原理是两个层级的事情 我们首先知道计算机网…

1. BOOT.BIN 2. 固化 3. 启动 4. SDK 5. 文件

在进行FPGA的开发与固化过程中&#xff0c;生成BOOT.BIN文件是一个重要的步骤。BOOT.BIN文件通常包含了系统启动所需的不同文件&#xff0c;以下是如何创建和使用该文件的详细说明。 ### 生成BOOT.BIN文件的步骤 1. **方法一&#xff1a;通过项目构建** - 右键单击项目&#xf…