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

时间:2015-08-10 13:54:15

标签: mysql entity-framework ef-migrations

我已经设置了实体框架来使用MySQL并创建了迁移。

当我运行update-database时,我得到错误“table dbname.dbo.tablename”不存在。在-Verbose模式下运行我看到导致错误的语句:

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

当我在MySQL工作台中直接运行查询时会抛出相同的错误。

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

然而,迁移会使用dbo生成所有内容。前缀,不起作用。

有没有人有解决方案?

2 个答案:

答案 0 :(得分:13)

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

你必须设置:

CodeGenerator = new MySqlMigrationCodeGenerator();

在您的上下文配置类中。这将摆脱MySQL的架构乱码。我的Configuration类看起来像这样:

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();
    }
}

答案 1 :(得分:1)

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

CodeGenerator = new MySqlMigrationCodeGenerator();

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

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

update-database -script