EF6 MySQL更改所有表前缀

Log*_*gan 1 mysql ef-code-first entity-framework-6

我在服务器上有一个mysql数据库,我已经买了一些空间.现在我想在我的网站上添加一个新的mvc应用程序来尝试一些东西,而不会弄乱我现有的应用程序.这让我有点问题,因为我只有一个数据库可用,我可以买一个新的,但我不想每次想要尝试填充时都要买一个新数据库.

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

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

只要您使用mssql数据库,或者删除mysql数据库并创建一个新数据库,这就完全符合我的要求.但是,我给出的数据库不是mssql数据库,丢弃它不是一个选项.

当使用现有的mysql db时,我尝试运行

update-database
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

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

其中"mytestdb"是我正在测试的本地数据库,"testitems"是当前/上一个表名,.frm是db格式的,我不知道这个"dbo @ 002e"是什么,我试过googling它没有用.

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

有没有人处于类似的情况,或者有关于如何使其工作的想法?=)

Leo*_*rdo 6

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

RenameTable(name: "dbo.Table", newName: "pf_Table");
Run Code Online (Sandbox Code Playgroud)

尽管CreateTable的所有内容都可以,表格名称前缀为"dbo.",RenameTable会生成整个"dbo.Name",因此会出现错误.我的建议是手动删除"dbo".在RenameTable的"name:"参数上.

编辑:

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

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

它应该工作自.Net Connector版本6.7.4.