EF6 MySQL更改所有表前缀

时间:2015-03-24 13:49:44

标签: 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);
    }

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

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

update-database

我收到以下错误

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

其中&#34; mytestdb&#34;是我正在测试的本地数据库,&#34; testitems&#34;是当前/以前的表名,.frm是db格式的,我不知道这是什么&#34; dbo @ 002e&#34;是的,我试着谷歌搜索无济于事。

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

有没有人遇到类似的情况,或者有关于如何使其发挥作用的想法? =)

1 个答案:

答案 0 :(得分:6)

dbo @ 002e代表&#34; dbo。&#34;,查看您的迁移文件,您应该发现这样的行:

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

尽管CreateTable的所有内容都可以,表格名称前缀为&#34; dbo。&#34;,RenameTable来源于整个&#34; dbo.Name&#34;被寻找,所以错误来了。 我的建议是手动删除&#34; dbo。&#34;在RenameTable&#34;名称:&#34;参数。

编辑:

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

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

自.Net Connector版本6.7.4开始以来它应该可以工作。