无法将代码首次迁移应用到mysql数据库

时间:2012-12-17 11:19:57

标签: mysql asp.net-mvc ef-code-first ef-migrations

我正在使用EF代码第一个模型开发asp.net mvc。我正在尝试首先使用EF代码将迁移应用于我的项目。我正在使用MySql数据库。目前我使用的是6.6.4.0版本的EF 4.3.1版本和mysql连接器/ .net。我成功地将迁移添加到我的项目中,这意味着我执行了一系列命令,这些命令对我没有任何错误。我已按照这些步骤进行操作,

PM> Enable-Migrations

PM> Add-Migration InitialMigration

PM> update-database -verbose

这些步骤为我的项目创建了Migration文件夹,在Migration文件夹中创建了配置和timestamp_Initialmigration文件,在配置文件中我添加了以下代码。

SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());

之后我在我的班级添加了一个字段,如

public int newprop{get; set;}

之后我在PM控制台中执行update-database -verbose命令。

当我执行我的应用程序时,它会抛出一个错误,如

“'字段列表'中的未知列'Extent1.newprop'”

请指导我为什么我得到这个错误我走错了方向请指导我。

2 个答案:

答案 0 :(得分:1)

如果您没有使用自动迁移

Database.SetInitializer(new MigrateDatabaseToLatestVersion());

 public class MyMigrationConfiguration : DbMigrationsConfiguration<MyDbContext>
    {
        public MyMigrationConfiguration()
        {
            AutomaticMigrationsEnabled = true; // Are you using this ?????
            AutomaticMigrationDataLossAllowed = true;
        }
    }

然后,您需要使用PM Commandlet告诉EF添加另一个迁移并更新数据库。

PM> Enable-Migrations  //already done this ?
PM> Add-Migration myLabel
PM> Update-Database

在网上搜索“基于代码的迁移”以获取帮助

答案 1 :(得分:0)

回答OP有点晚了...但是因为它弹出谷歌我的第一次打击,不管怎么说还是继续:)

问题在于,与MSSQL相比,MySQL存在许多限制。 *特别是对于casesensitive文件系统(linux主机)上的mysql,表名可能不包括大写字母。 *键也限制为767字节,应该/必须是整数类型。 *然后,Mysql.Data包中的部分迁移生成器出现问题。例如,在重命名时,&#d;&#39;并没有被剥夺。

看看这个guide on insidemysql.com。它描述了如何重新配置​​Aspnet.Identity堆栈以在int类型转换中使用TKey

我有一个项目,我也已经连接到HistoryContext,允许改变__MigrationHistory的结构。它重命名表格/列并调整其大小。还有IdentityConfig的翻版 - 所以看看

  1. https://github.com/mschr/ASP.NET-MVC5.MySql-Extended-Bootstrap/tree/master/my.ns.entities/DbContexts/MigrationConfig
  2. https://github.com/mschr/ASP.NET-MVC5.MySql-Extended-Bootstrap/tree/master/my.ns.entities/IdentityConfig
  3. 然后将其与您的上下文联系起来(请参阅IdentityDbContext)并在您的Migrations.Configuration类中启用提到的MySqlMigrationScriptGeneratorHistoryContextFactory(请参阅我的IdentitiyMigrations.Configuration