Unable to apply code first migrations to mysql database

霸气de小男生 提交于 2019-12-12 19:23:09

问题


I am working on asp.net mvc with EF code first model. I am trying to apply migrations using EF code first to my project. I am using MySql database. currently i am using EF 4.3.1 version and mysql connector/.net of 6.6.4.0 version. I am successfully add migrations to my project that means i execute series of commands that gave no errors for me. I have followed these steps,

PM> Enable-Migrations

PM> Add-Migration InitialMigration

PM> update-database -verbose

these steps create Migration folder to my project and inside Migration folder it creates configuration and timestamp_Initialmigration files, in configuration file i have added following code.

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

after that i have added one field to my class like,

public int newprop{get; set;}

after that i execute update-database -verbose command in PM console.

when i execute my application it throws an error like,

"Unknown column 'Extent1.newprop' in 'field list'"

please guide me why i am getting this error does i went to the wrong way please guide me.


回答1:


If your not using automatic migrations

Database.SetInitializer(new MigrateDatabaseToLatestVersion());

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

Then you need to tell EF using the PM Commandlet to add another migration and update the database.

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

Search for "code based migrations" on web for help




回答2:


This is a bit late to answer OP... But since it pops up as my first hit on google, ill go ahead anyways :)

The problem here is, that there are a number of restrictions on MySQL as compared to MSSQL. * In particular with mysql on casesensitive filesystems (linux hosts), table names may not include capitalized letters. * Also keys are restricted to 767 bytes and should/must be integer types. * Then there is a problem in parts of the migration generators from Mysql.Data package. For instance when renaming, 'dbo' is not stripped away.

Have a look at this guide on insidemysql.com. It describes how to reconfigure the Aspnet.Identity stack for using int in the TKey typecast.

I have a project where i also have hooked into HistoryContext, allowing to alter structure of __MigrationHistory. It renames and resizes the table/columns. There's also the remake of IdentityConfig - so have a look at

  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

Then hook it up with your context (see IdentityDbContext) and enable the mentioned MySqlMigrationScriptGenerator and HistoryContextFactory in your Migrations.Configuration class (see my IdentitiyMigrations.Configuration)



来源:https://stackoverflow.com/questions/13913126/unable-to-apply-code-first-migrations-to-mysql-database

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!