初级代码游戏的专栏介绍与文章目录-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#类库项目和解决方案,这样就不可能遇到代码错误了。其他项目引用这个项目就可以了。
(这里是文档结束)