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
我已将 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