我有MySql数据库 ASP.NET Core 2.2应用程序在我的本地Windows机器上运行良好。但是当我将它们发布到 Ubuntu 18.10 并尝试为我的User
插入任何子记录时,我得到以下异常:
MySql.Data.MySqlClient.MySqlException (0x80004005): 无法添加或 更新子行:外键约束 fils (
library
。Books
, 外键FK_Books_Users_UserId
约束 (UserId
) 引用users
(id
))
在创建book
之前,用户已经创建并具有Id
。
两个表都使用InnoDB引擎。
两个表具有相同的排序规则。
用户与之连接的所有模型都会发生此问题。
部署的数据库填充了我的本地数据库转储。
数据库提供程序:Pomelo.EntityFrameworkCore.MySql
我认为问题一定出在Windows和Ubuntu之间。但是我不知道除了不同的区分大小写之外,它可以是什么,事实证明这不是问题,因为我尝试了不同的lower_case_table_names
配置。
问题出在mysqldump
上。如问题中所述,本地数据库被导出,然后导入到生产环境中。但是本地和生产MySQL版本是不同的。某些表名和列名以小写形式导出。
解决方案是将所有损坏的名称重命名为有效名称,然后才导入转储。或者,如果您不希望每次都这样做,请使用与生产数据库上的 on 对应的版本转储mysqldump
本地数据库。