0

我有一个问题,我无法在网络上找到答案。

我正在将 CodeFirst EF 4.3.1 迁移与 MySQL 一起使用。

我的 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 被转换为 MsSql 命令,而不是 MySql 命令,所以难怪它会报告语法错误。

任何想法如何解决它?

我知道我可以使用 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)
    {
    }
}
4

1 回答 1

3

该问题已由 Devart 解决。

以下链接中的详细信息:

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

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

于 2012-06-10T05:30:07.100 回答