问题标签 [pomelo-entityframeworkcore-mysql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
516 浏览

entity-framework - 对 dbContext 进行集成测试

我正在尝试进行集成测试以测试我的 ApplicationDbContext 是否正常工作。它位于使用实体框架和 Pomelo.EntityFramework.MySql 的 MVC 核心 asp.net 3.1 应用程序上。

目前,我刚刚使用 ApplicationDbContext 创建了 MVC 应用程序;一个实体;我在startup.cs中配置了数据库。当时,我测试了迁移和更新数据库,它可以工作。

之后,我在我的解决方案中为单元测试和集成测试添加了 2 个项目,然后在它们上添加了项目引用。我做了一个简单的测试来使用 ApplicationDbContext 但它不起作用,我在解决这个问题时遇到了麻烦。

如果有人知道如何使用 xunit 创建这种测试。

我的项目代码在这里:https ://github.com/BeRoots/aspnetcore3.1-MVC-EF-MySQL

我尝试做的集成测试在这里

0 投票
1 回答
5616 浏览

mysql - Pomelo MySqlException:无法连接到任何指定的 MySQL 主机

我正在开发需要在 Ubuntu Linux 18.04LTS 服务器上运行的 Blazor 服务器端项目。(注意:这个项目没有使用 Web Assembly。)

我正在使用 C# 和Pomelo.EntityFrameWorkCode.MySqlnuget 包 (v3.1.1) 连接到在 Linux 服务器上运行的 MySQL 数据库。

当我在我的 Windows 开发系统上本地运行该应用程序时,一切正常。当我将文件发布到 Linux 服务器时,它大约有 5% 的时间工作 - 其余的我收到一条错误消息

Pomelo MySqlException:无法连接到任何指定的 MySQL 主机

我在我的 Windows 系统和 Linux 服务器上都连接到同一个 MySQL 数据库。MySQL 在 Linux 上运行,正确的端口是打开的,等等。

更详细的错误信息是:

处理请求时发生未处理的异常。MySqlException:无法连接到任何指定的 MySQL 主机。C:\projects\mysqlconnector\src\MySqlConnector\Core\ServerSession.cs 中的 MySqlConnector.Core.ServerSession.ConnectAsync(ConnectionSettings cs, ILoadBalancer loadBalancer, IOBehavior ioBehavior, CancellationToken cancelToken),第 442 行

InvalidOperationException:引发了一个异常,可能是由于暂时性故障。考虑通过将“EnableRetryOnFailure()”添加到“UseMySql”调用来启用瞬时错误恢复能力。Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.Execute(TState 状态,Func 操作,Func> verifySucceeded)

MySqlException:无法连接到任何指定的 MySQL 主机。C:\projects\mysqlconnector\src\MySqlConnector\Core\ServerSession.cs MySqlConnector.Core.ConnectionPool.GetSessionAsync(MySqlConnection 连接,IOBehavior ioBehavior 中的 MySqlConnector.Core.ServerSession.ConnectAsync(ConnectionSettings cs,ILoadBalancer loadBalancer,IOBehavior ioBehavior,CancellationTokencancellationToken) , CancellationToken cancelToken) in > C:\projects\mysqlconnector\src\MySqlConnector\Core\ConnectionPool.cs MySqlConnector.Core.ConnectionPool.GetSessionAsync(MySqlConnection connection, IOBehavior ioBehavior, CancellationToken cancelToken) in > C:\projects\mysqlconnector\src\ MySqlConnector\Core\ConnectionPool.cs System.Threading.Tasks.ValueTask.get_Result() System.Runtime.CompilerServices。

System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable+ConfiguredValueTaskAwaiter.GetResult() MySql.Data.MySqlClient.MySqlConnection.OpenAsync(Nullable ioBehavior, CancellationToken cancelToken) 在 C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnection.cs MySql.Data.MySqlClient.MySqlConnection.Open() 在 C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnection.cs Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(bool errorsExpected) Microsoft.EntityFrameworkCore.Storage .RelationalConnection.Open(bool errorsExpected)

Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlRelationalConnection.Open(布尔错误预期)

Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject) Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable+Enumerator.InitializeReader(DbContext _, bool result) Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.Execute(TState state, Func操作,Func> verifySucceeded)

Startup 类中的配置如下所示:

我的连接字符串是:

有趣的是我可以使用 MySQL Workbench 并使用完全相同的凭据从我的 Windows 开发系统或 Linux 服务器连接到数据库。

此应用程序设计为仅在内部运行,并且运行该应用程序的服务器在 Internet 上不可见,因此我不太关心安全问题(如果有人想知道一群自闭症儿童有什么设备和活动,他们可以拥有它!!)

在尝试隔离错误时,我已将应用程序完全删除并重新部署到网络上的不同 linux 服务器,结果相同,但正如我之前所说,大约 5% 的时间,应用程序在 linux 上按预期工作服务器。

应用程序中不使用数据库的其他页面工作正常,所以我认为这不是 Web 服务器的问题(NGinx 作为 Kestrel 的反向代理)。

我还想强调,该应用程序大约 5% 的时间在 linux 上运行,100% 的时间在 Windows 上运行——两者都连接到在 linux 上运行的同一个 MySQL 服务器。

如果需要更多代码示例,该应用程序位于 Github 上,地址为https://github.com/SteveTeece/Lab

这个让我难住了。非常感谢有关如何解决此问题并使其在 Linux 服务器上运行的任何想法。

谢谢

0 投票
1 回答
894 浏览

mysql - 如何使用 Pomelo ORM 为 .net 核心传递 MySQL 存储过程的输出参数

这是我在 MySQL 中的 SP

我从使用 Pomelo ORM 的 .netcore web api 项目调用 SP。

使用输出参数时出现以下错误。

CommandType 为 Text 时仅支持 ParameterDirection.Input(参数名称:@MemberID)

如何传递输出参数?

0 投票
2 回答
541 浏览

c# - 为什么将单个实体保存到我的 EF Core 数据库上下文会导致多次插入?

我只是在构建一个模型,然后尝试通过该.SaveChanges()函数将其插入数据库,但是当我运行时,SaveChanges() 我得到一个数据库错误,表明发生了主键重复......

所以我深入研究了 SQL 日志记录,发现这个模型插入试图重新插入已经存在的数据......为什么会发生这种情况?

我的代码

编辑:所以我改变了一切来创建模型,只使用外键引用的id(没有直接链接的实体),这似乎解决了我的问题。一旦创建了实体并应用了 .SaveChanges() ,模型就会像预期的那样链接到所有其他实体。似乎我使用以前在不同 DbContext 下查询过的实体而不是我用于创建这个新实体的活动实体给自己造成了问题。

0 投票
2 回答
1599 浏览

mysql - 无法使用部署在 Aws Ecs 上的 .net 核心应用程序连接到 Aurora MySql

我在 .net core 3.1 中有一个应用程序,我正在使用 MySql。要连接到 MySql,我正在使用 Pomelo.EntityFrameworkCore.MySql nuget。

我的 .net 核心应用程序部署为 AWS ECS 上的 docker 容器,我使用 Aurora MySql RDS 存储数据。我已授予对 Aurora MySql 的“可公开访问”访问权限,我可以使用 MySql 工作台连接到数据库,也可以使用 localhost 连接到我的 .net 核心应用程序。但是当我部署应用程序并尝试执行任何数据库操作时,它开始抛出异常:

引发了一个异常,可能是由于暂时性故障。考虑通过将“EnableRetryOnFailure()”添加到“UseMySql”调用来启用瞬时错误恢复能力。

然后我添加了这样的重试模式:

我的连接字符串是这样的:

添加重试模式后。我收到此错误:

“使用 'MySqlRetryingExecutionStrategy' 执行数据库操作时超出最大重试次数 (5)。请参阅内部异常以了解最近的失败。”

所以我怀疑,这是另一回事。我在这里做错了什么?或者在aws方面可能有问题

0 投票
1 回答
705 浏览

c# - EF.Core 3.x 生成窗口函数而不是 JOIN,导致 MySQL 语法错误

运行以下 EF Core 查询:

导致此错误:

检查生成的 SQL 会导致 EF 出于某种原因插入了一条PARTITION指令:

我宁愿期待这样的查询:

JOIN当一个简单的 onActiveLabs就足够时,为什么 EF 会生成如此复杂的查询?

我正在使用 EF Core 3.1.2、Pomelo MySQL 3.1.1 和 MySQL 5.7.14 进行测试。


我的数据库如下所示: 我有两个表Groups

ActiveLabs

后者表示多对多关系,它跟踪哪个实验室对哪个组处于活动状态。因此,一个Group对象有一个导航属性ActiveLabs,它指向该组的活动实验室。类/表结构和外键是正确的,并且在所有用例中都能正常工作。


编辑: 看起来PARTITIONMySQL 5.7.14 根本不支持(Pomelo 的 GitHub 存储库上的相关问题)。升级到 MySQL 8.0 消除了错误消息,查询现在可以工作;但是,我仍然不明白为什么 EF 会生成PARTITION(window function) 语句

0 投票
1 回答
962 浏览

c# - dot net core(pomelo mysql provider)中的mysql - 无法访问已处置的对象

我在使用 .Net Core (3.1) 和 Mysql (provider Pomelo.mysql 3.1.1) 时遇到问题。我有一个非常基本的函数(只是从表中获取所有记录,一个单行函数),但由于某种原因,我总是得到 ObjectDisposedException,所有堆栈跟踪都发生在 Pomelo Provider 中。有谁知道这可能是什么原因造成的?

初始化代码是:

然后它只是

之后的用法相当简单:

并且完整的异常堆栈是

0 投票
1 回答
1133 浏览

c# - Linq To Entities: String.Contains 一个列表

我正在使用ASP.net Core 3.0with Entity Framework Core 3.0and Pomelo.EntityFrameworkCoreprovider for MySQL,我需要查询来自特定城镇的所有用户。例如,假设我有一个字符串列表,targettedTowns其中我有以下城镇

  • 科朗吉
  • 兰地
  • 齐亚殖民地
  • 沙阿费萨尔
  • 奎达巴德

现在我想targettedTowns使用 Linq Lambda 语法查找列表中的所有用户。

我数据库中的用户将他们的城镇保存为

  • 科朗吉
  • 科朗吉-齐亚殖民地
  • Korangi-Bhittai 殖民地
  • 科朗吉阿拉瓦拉镇
  • 兰地-夏尔保
  • 兰迪-阿瓦米殖民地
  • 兰迪-谢拉巴德
  • 沙费萨尔

我目前正在尝试的是

但由于 String.Contains 没有在参数中列出列表,所以我不能使用它。

0 投票
1 回答
885 浏览

docker - 无法使用 EFCore Mysql 提供程序将 Docker 中的 Asp.net Core WebApi 连接到主机服务器上的非 Docker Mysql

我有一个带有 EfCore 3.1.3 和 Pomelo.EntityFrameworkCore.MySql 作为提供者的 Asp.Net Core 3.1.3 WebApi 这个 WebApi 是在 Docker 中构建和部署的。

主机服务器是 Debian 10,它配置了 UFW 作为防火墙。

我在主机服务器上安装了 Mysql Server。

我将 Mysql 的绑定地址设置为 0.0.0.0

/etc/mysql/mysql.conf.d/mysqld.cnf

我在 UFW 中创建了一条规则,只允许本地主机和docker0网桥 IP 地址 在此处输入图像描述

在此处输入图像描述

在我的 docker-compose 配置中,我添加了主机服务器的 IP 地址,但与 MySql 的连接失败

在 Startup.cs 中,这里是 EfCore 的配置:

要构建连接字符串,我使用 MySql.Data.MySqlClient.MySqlConnectionStringBuilder:

我生成迁移脚本并将其部署在服务器上,因为 Pomelo 在调用 dbContext.Database.Migrate(); 时将数据库名称设置为空字符串;

在 dockerfile 中,我公开了端口 80 和 443。

我将数据库参数作为环境变量发送到 docker-compose 文件中。

我做了一些数据播种以从 Identity 添加用户和角色。

我错过了什么?

0 投票
0 回答
311 浏览

docker - Pomelo / Docker / MySQL - 无法连接到任何指定的 MySQL 主机

我正在尝试使用 EF-Core,代码优先,我已经构建了我的迁移并运行它们,没有问题(它们已经工作了)。

但是,当我尝试调用上下文来保存更改时,我收到以下错误:

无法连接到任何指定的 MySQL 主机

显然,这是一个奇怪的错误,事实上迁移工作,但是我想知道这是否与在 Docker 中运行的 MySQL 和在 Docker 中运行的应用程序有关?

语境:

调用类:

称呼:

Docker 设置为允许来自 3306 的连接,我能够从 pm 控制台运行迁移,并且能够通过 HeidiSQL 连接 - 欢迎任何建议。