【问题标题】:EF6 MySQL changing all table prefixesEF6 MySQL 更改所有表前缀
【发布时间】:2015-03-24 13:49:44
【问题描述】:

我在购买了一些空间的服务器上有一个 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 数据库时,我尝试运行

update-database

我收到以下错误

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

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

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

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

【问题讨论】:

    标签: mysql ef-code-first entity-framework-6


    【解决方案1】:

    dbo@002e 代表“dbo.”,查看您的迁移文件,您应该会发现如下行:

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

    尽管 CreateTable 可以使用带有前缀“dbo.”的表名,但 RenameTable 起源于要查找的整个“dbo.Name”,因此出现了错误。 我的建议是手动删除“dbo”。在 RenameTable 的 "name:" 参数上。

    编辑:

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

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

    它应该从 .Net 连接器版本 6.7.4 开始工作。

    【讨论】:

      猜你喜欢
      • 2011-01-28
      • 2013-04-26
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 2013-01-26
      • 1970-01-01
      • 2016-08-25
      • 2018-08-23
      相关资源
      最近更新 更多