0

在对 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 类,但没有生成迁移类。如果我尝试执行“添加迁移”命令,则会引发相同的错误“startIndex 不能大于字符串长度”。

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

对这个问题的任何想法都非常感谢提前谢谢!

4

1 回答 1

0

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

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

参考:MySQL 5.5 + .NET 连接器 + 实体框架 + 迁移 = FormatException

于 2012-12-29T17:39:35.660 回答