MySQL 的 EF 和 Code First 迁移 - dbo.tablename 不存在

EF and Code First Migrations with MySQL - dbo.tablename does not exist

我已将 entity framework 设置为使用 MySQL 并创建了迁移。

当我 运行 更新数据库时出现错误“table dbname.dbo.tablename”不存在。运行 在 -Verbose 模式下我看到导致错误:

alter table `dbo.Comments` drop foreign key `FK_dbo.Comments_dbo.Comments_Comment_ID`

当我 运行 MySQL workbench 中的查询直接抛出相同的错误。

问题似乎出在 dbo 上。迁移集中的前缀。 dbo.tablename 形式的任何内容都不会 运行 表示 table 不存在。例如。 select * from dbo.tablename 失败但 select * from tablename 有效。数据库由 Entity Framework 生成,代码优先迁移也由 EF 生成。

但是,迁移会生成带有 dbo 的所有内容。前缀,这不起作用。

有人对此有解决方案吗?

我今天也遇到了这个问题;在这里找到我的答案: MySqlMigrationCodeGenerator

您必须设置:

CodeGenerator = new MySqlMigrationCodeGenerator();

在您的上下文配置中 class。这将消除 MySQL 的模式乱码。我的配置 class 如下所示:

internal sealed class Configuration : DbMigrationsConfiguration<YourContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
        SetSqlGenerator("MySql.Data.MySqlClient", new MySqlMigrationSqlGenerator());
        SetHistoryContextFactory("MySql.Data.MySqlClient", (conn, schema) => new MySqlHistoryContext(conn, schema));
        CodeGenerator = new MySqlMigrationCodeGenerator();
    }
}

我有同样的问题,我应用了 Sorio 发布的解决方案,但它产生了很多问题。

CodeGenerator = new MySqlMigrationCodeGenerator();

此代码行可以更改您生成的所有 sql,例如在我的例子中,sql 代码应用于数据库,所有外​​键约束都消失了。

我仍然没有解决方案,因为对我来说这是不可接受的,我建议您在使用此解决方案之前使用命令检查 sql 生成:

update-database -script