2012-12-17 123 views
2

我正在使用EF代碼第一個模型在asp.net mvc上工作。我正在嘗試將使用EF代碼的遷移先應用到我的項目中。我正在使用MySql數據庫。目前我使用的是EF 4.3.1版本和MySQL連接器/ .net的6.6.4.0版本。我成功地將遷移添加到了我的項目中,這意味着我執行了一系列不會給我帶來任何錯誤的命令。我按照這些步驟,無法將代碼第一次遷移到mysql數據庫

PM> Enable-Migrations 

PM> Add-Migration InitialMigration 

PM> update-database -verbose 

這些步驟創建遷移文件夾到我的項目和遷移文件夾內創建它的配置和timestamp_Initialmigration文件,配置文件我已經添加以下代碼。

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

後,我已經添加一個字段上我的課一樣,

public int newprop{get; set;} 

後,我在下午控制檯執行更新數據庫-verbose命令。

當我執行我的應用程序,它拋出這樣的錯誤,

「未知列‘Extent1.newprop’在‘字段列表’」

請指導我爲什麼我收到這個錯誤確實我請指導我。

回答

1

如果你不使用自動遷移

Database.SetInitializer(新MigrateDatabaseToLatestVersion());

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

然後,您需要告訴EF使用PM Commandlet添加另一個遷移並更新數據庫。

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

搜索網絡上的「基於代碼遷移」的幫助

0

這是一個有點晚回答OP ...但由於它會彈出我先打上谷歌,生病繼續反正: )

這裏的問題是,與MSSQL相比,MySQL有許多限制。 *特別是在casesensitive文件系統(linux主機)上使用mysql時,表名可能不包含大寫字母。 *密鑰限制爲767個字節,應該/必須是整數類型。 *然後,從Mysql.Data包的部分遷移生成器出現問題。例如,在重命名時,'dbo'不會被刪除。

看看這個guide on insidemysql.com。它描述瞭如何重新配置​​在TKey類型轉換中使用int的Aspnet.Identity堆棧。

我有一個項目,我也掛鉤到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

然後與你的情況下把它掛起來(見IdentityDbContext),並能夠在遷移過程中提到MySqlMigrationScriptGeneratorHistoryContextFactory .Configuration類(請參閱我的IdentitiyMigrations.Configuration

相關問題