我已经设置了实体框架来使用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生成所有内容。前缀,不起作用。
有没有人有解决方案?
答案 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