我正在使用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'”
请指导我为什么我得到这个错误我走错了方向请指导我。
答案 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的翻版 - 所以看看
然后将其与您的上下文联系起来(请参阅IdentityDbContext)并在您的Migrations.Configuration类中启用提到的MySqlMigrationScriptGenerator
和HistoryContextFactory
(请参阅我的IdentitiyMigrations.Configuration)