使用 DataGrip 复制数据库表后遇到 .NET 并发错误

问题描述 投票:0回答:1

我最近使用 DataGrip ->“复制到...”命令将一些 MySQL 表从一个 Amazon Aurora 数据库迁移到另一个数据库(我们需要更新一些表,我认为可以使用现有工具快速完成此操作)。该服务允许您将表从一个数据源迁移到另一个数据源,而无需数据转储或导出 RDS 快照。完成此迁移后,我在 AWS 环境中遇到以下错误:

数据库操作预计影响1行,实际影响0行;自加载实体以来,数据可能已被修改或删除。有关理解和处理乐观并发异常的信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=527962..

我的代码使用 .NET 的实体框架进行配置,以在我们的 AWS 环境中实例化数据库并与数据库交互。此 .NET 应用程序在 .NET 容器内运行,并且在 AWS 中运行和本地运行时包含相同的代码。当从本地计算机测试应用程序时,通过堡垒主机将请求端口转发到 RDS 集群,我能够毫无问题地连接数据库并与其通信。但是,当应用程序部署到 AWS ECS Fargate 任务中时,当应用程序尝试写入数据库中的某些特定表时,EF 客户端将返回上述错误。

为什么这在我的本地环境中可以工作,但同一个 EF 客户端无法写入数据库?

关于代码在 AWS 中的执行方式与在本地计算机上运行时的执行方式不同的任何其他见解。

.net docker entity-framework amazon-rds datagrip
1个回答
0
投票

仅供参考 - 对于将来遇到此问题的任何人。

我解决这个问题的方法是删除使用 DataGrip 复制的表。然后,我使用 mysqldump 导出这些相同的表,并将它们导入到第二个 RDS 集群中。我认为这与 DataGrip 工具在完成副本时未锁定表有关。每当客户端尝试写入数据库时,并发锁都会阻止 .Save() 操作。

在我的研究中我无法找到任何关于这种情况的信息,并且我只是在一些运气之后才认识到这个问题。请小心如何从实时环境中导出数据。

对于为什么在我的 Windows 11 计算机上运行的容器能够写入数据库但 ECS Fargate 任务无法写入有什么想法吗?

© www.soinside.com 2019 - 2024. All rights reserved.