mayash
mayash

Reputation: 231

Fail to run Code-First Migration - RenameColumn - with MySql

I have an issue which I could not find answer for across the web.

I am using CodeFirst EF 4.3.1 Migrations with MySQL.

My MySQL provider is Devart.

After running Add-Migration against an existing database, I got the following code:

public partial class ChangeSet_1231 : DbMigration
{
    public override void Up()
    {
        RenameColumn(table: "RW_TTaskInstanceProperties", name: "TaskInstance_TaskInstanceId", newName: "TaskInstanceId");
    }

    public override void Down()
    {
        RenameColumn(table: "RW_TTaskInstanceProperties", name: "TaskInstanceId", newName: "TaskInstance_TaskInstanceId");
    }
}

Running Update-Database results in the following error:

PM> Update-Database -verbose –startupprojectname "RTDataAccess"
Using NuGet project 'RTDataAccess'.
Target database is: 'rsruntime' (DataSource: localhost, Provider: Devart.Data.MySql, Origin: Explicit).
Applying explicit migrations: [201205311312361_ChangeSet_1231].
Applying explicit migration: 201205311312361_ChangeSet_1231.
ALTER TABLE RW_TTaskInstanceProperties RENAME COLUMN TaskInstance_TaskInstanceId TO TaskInstanceId

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'COLUMN TaskInstance_TaskInstanceId TO TaskInstanceId' at line 2

From looking at the error details I see that the RenameColumn is translated to a MsSql command, rather than MySql command, so no wonder it reports about a syntax error.

Any ideas how to solve it?

I know I can use Update-Database -script, then edit the script to fit MySql and run it, but I prefer to make the Update-Database command work...

Thanks.

In response to Ladislav's question:

Yes, I registered the Devart's SQL generator for MySQL Migrations. My Configuration class looks like that:

using Devart.Data.MySql.Entity.Configuration;
using Devart.Data.MySql.Entity.Migrations;

internal sealed class Configuration : DbMigrationsConfiguration<RTDataAccess.RTContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;

        MySqlEntityProviderConfig.Instance.Workarounds.IgnoreSchemaName = true;
        var connectionInfo = MySqlConnectionInfo.CreateConnection("Server=xxxx;Port=yyyy;Database=rsruntime;Uid=zzzz;Pwd=wwww;charset=utf8;");
        this.TargetDatabase = connectionInfo;
        this.SetSqlGenerator(connectionInfo.GetInvariantName(), new MySqlEntityMigrationSqlGenerator());
    }

    protected override void Seed(RTDataAccess.RTContext context)
    {
    }
}

Upvotes: 0

Views: 2259

Answers (1)

mayash
mayash

Reputation: 231

The issue was fixed by Devart.

Details at the following links:

http://forums.devart.com/viewtopic.php?f=2&t=24250

http://www.devart.com/dotconnect/mysql/download.html

Upvotes: 3

Related Questions