使用MySql进行EF5数据库迁移

时间:2012-12-29 17:09:13

标签: mysql

在针对MySql数据库执行Enable-Migrations命令时遇到以下错误:

PM> Enable-Migrations -ContextTypeName CodeFirstEFMySqlA1.Models.DataContext
Checking if the context targets an existing database...
System.ArgumentOutOfRangeException: startIndex cannot be larger than length of string.
Parameter name: startIndex
   at System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy)
   at System.Data.Entity.Migrations.DbMigrator.ScaffoldInitialCreate(String namespace)
   at System.Data.Entity.Migrations.Design.MigrationScaffolder.ScaffoldInitialCreate()
   at   System.Data.Entity.Migrations.Design.ToolingFacade.InitialCreateScaffoldRunner.Scaffold(MigrationScaffolder scaffolder)
   at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.RunCore()
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
startIndex cannot be larger than length of string.
Parameter name: startIndex

该项目是使用以下方式创建的:   - ASP.NET MVC4   - EF5 Code First   - MySql数据库服务器   - MySql.Data,MySql.Data.Entity   - 使用System.Data.Entity.IDatabaseInitializer实现了自定义数据库初始化程序,用于创建迁移历史记录表。

型号:

public class Product
{
    [Key]
    public int Id { get; set; }

    [Required, MaxLength(100)]
    public string Name { get; set; }

    public int Rank { get; set; }

    [MaxLength(100)]
    public string Type { get; set; }
}

执行命令“Enable-Migrations”后,生成了Configuration.cs类,但未生成任何迁移类。如果我尝试执行“Add-Migration”命令,则会引发相同的错误“startIndex不能大于字符串的长度”。

我的尝试是测试EF5 Code First和数据库迁移功能对MySql数据库服务器的使用情况。我看到数据库创建可以使用自定义数据库初始化程序完成,但是我无法使数据库迁移工作。

对此问题的任何想法都非常感谢 在此先感谢!!

1 个答案:

答案 0 :(得分:0)

感谢Kirk Woll,我能够找到解决上述问题的方法。

我使用的是MySQL Data Connector v.6.6.4,它内置了对EF 5的支持。现在,数据库迁移可以正常运行MySql。请注意,我必须删除以前的数据库,让EF使用Update-Database命令创建一个新数据库。

参考:MySQL 5.5 + .NET Connector + Entity Framework + Migrations = FormatException