EF6 MySQL 更改所有 table 前缀

EF6 MySQL changing all table prefixes

我在服务器上有一个 mysql 数据库,我在其中购买了一些 space。 现在我想在我的网站上添加一个新的 mvc 应用程序来尝试一些东西,而不会破坏我现有的应用程序。 这让我有点麻烦,因为我只有一个数据库可用,我可以只买一个新的,但我不想每次我想尝试的时候都买一个新的。

所以我想,为什么不为我的所有表预先修复一些该应用程序的唯一值,这样我就可以在仍然使用同一个数据库的同时将存储的数据分开。 这让我踏上了浏览 Whosebug 和网络其他地方无数文章的旅程。 大约一天后,我偶然发现了这个金块

<!-- language: c# -->
protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Types().Configure(entity => entity.ToTable("pf_" + entity.ClrType.Name));
        base.OnModelCreating(modelBuilder);
    }

这正是我想要的,只要您使用 mssql 数据库,或者删除 mysql 数据库并创建一个新数据库。 但是,给我的数据库不是 mssql 数据库,删除它不是一个选项。

当使用现有的 mysql 数据库时,我尝试 运行

update-database

我收到以下错误

Can't find file: '.\mytestdb\dbo@002etestitems.frm' (errno: 2 - No such file or directory)

其中 "mytestdb" 是我正在测试的本地数据库,"testitems" 是 current/previous 表名,.frm 当然是数据库格式,我不知道是什么这个 "dbo@002e" 是,我尝试用谷歌搜索它无济于事。

我的堆栈跟踪可以在这里找到。 http://pastebin.com/yF2dGkm6

有没有人遇到过类似情况,或者对我如何让它发挥作用有想法? =)

dbo@002e 代表 "dbo.",查看您的迁移文件,您应该发现像这样的行:

RenameTable(name: "dbo.Table", newName: "pf_Table");

尽管使用 table 名称前缀为 "dbo." 的 CreateTable 一切正常,RenameTable 起源于要查找的整个 "dbo.Name",因此出现错误。 我的建议是手动删除 RenameTable 的 "name:" 参数上的 "dbo."。

编辑:

解决编辑迁移文件的问题后,最好的解决方案是将其添加到配置构造函数中:

public Configuration()
{
    AutomaticMigrationsEnabled = false;
    ....
    SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());
    CodeGenerator = new MySql.Data.Entity.MySqlMigrationCodeGenerator();
    ....
}

自 .Net 连接器版本 6.7.4 起应该可以使用。