当前位置: 首页 > article >正文

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);
				}
            }

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

        确实比手写强多了。


(这里是文档结束)


http://www.kler.cn/a/311978.html

相关文章:

  • glide性能优化实战
  • C++ 语言实现读写.csv文件.xls文件
  • 文心一言 VS 讯飞星火 VS chatgpt (388)-- 算法导论24.5 8题
  • Wireshark:网络调试的强大利器
  • Kafka Eagle 安装教程
  • 【Kafka-go】golang的kafka应用
  • 【AI】简单了解AIGC与ChatGPT
  • VUE项目运行npm run dev命令后,自动打开浏览器导航到主页
  • flink 批量写clickhouse
  • SQL 查询语句汇总
  • 金砖软件测试赛项之Jmeter如何录制脚本!
  • 算法训练——day18 两数之和三数之和
  • 力扣春招100题——队列
  • Acwing 堆
  • 【QT】基于HTTP协议的网络应用程序
  • docker构建java镜像,运行镜像出现日志 no main manifest attribute, in /xxx.jar
  • 大模型-模型架构-新型模型架构
  • 程序员常用开发软件集合
  • AirTest 基本操作范例和参数解释(一)
  • 第157天: 安全开发-Python 自动化挖掘项目SRC 目标FOFA 资产Web 爬虫解析库
  • 缓存穿透 问题(缓存空对象)
  • C++ 中std::promise和std::future基本使用
  • OpenCV基础入门30讲(Python)——第二讲 图像色彩转换
  • 卷积参数量计算公式
  • GO主流开源框架
  • python测试开发---js基础