Web 全体で答えが見つからない問題があります。
MySQL で CodeFirst EF 4.3.1 Migrations を使用しています。
私の MySQL プロバイダーは Devart です。
Add-Migration を既存のデータベースに対して実行した後、次のコードを取得しました。
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");
}
}
Update-Database を実行すると、次のエラーが発生します。
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
エラーの詳細を見ると、RenameColumn が MySql コマンドではなく MSql コマンドに変換されていることがわかります。構文エラーが報告されるのも不思議ではありません。
それを解決する方法はありますか?
Update-Database -script を使用してから、MySql に合わせてスクリプトを編集して実行できることはわかっていますが、Update-Database コマンドを機能させる方が好きです...
ありがとう。
ラディスラフの質問への回答:
はい、MySQL 移行用に Devart の SQL ジェネレーターを登録しました。私の構成クラスは次のようになります。
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)
{
}
}