使用MySQL的EF6。字典中不存在给定的键

使用MySQL的EF6。字典中不存在给定的键,mysql,asp.net,asp.net-mvc,entity-framework,entity-framework-6,Mysql,Asp.net,Asp.net Mvc,Entity Framework,Entity Framework 6,我有Asp.NETMVC5应用程序,使用代码优先实体框架6链接到MySQL数据库 当我第一次创建数据库时,它工作得很好。但当我对模型进行更改时,会添加迁移。在(更新数据库)之后显示错误 这就是错误: PM> Update-Database System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary. a

我有Asp.NETMVC5应用程序,使用代码优先实体框架6链接到MySQL数据库

当我第一次创建数据库时,它工作得很好。但当我对模型进行更改时,会添加迁移。在(更新数据库)之后显示错误

这就是错误:

        PM> Update-Database 
        System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
           at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
           at MySql.Data.MySqlClient.MySqlConnectionStringBuilder.<>c.<.cctor>b__2_7(MySqlConnectionStringBuilder msb, MySqlConnectionStringOption sender)
           at MySql.Data.MySqlClient.MySqlConnectionStringBuilder.get_Item(String keyword)
           at MySql.Data.MySqlClient.MySqlConnectionStringBuilder.GetConnectionString(Boolean includePass)
           at MySql.Data.MySqlClient.MySqlConnection.get_ConnectionString()
           at System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.<GetConnectionString>b__12(DbConnection t, DbConnectionInterceptionContext`1 c)
           at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget, TInterceptionContext, TResult](TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)
           at System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.GetConnectionString(DbConnection connection, DbInterceptionContext interceptionContext)
           at System.Data.Entity.Internal.InternalConnection.GetStoreConnectionString(DbConnection connection)
           at System.Data.Entity.Internal.InternalConnection.OnConnectionInitialized()
           at System.Data.Entity.Internal.EagerInternalConnection..ctor(DbContext context, DbConnection existingConnection, Boolean connectionOwned)
           at System.Data.Entity.DbContext..ctor(DbConnection existingConnection, Boolean contextOwnsConnection)
           at System.Data.Entity.Migrations.History.HistoryContext..ctor(DbConnection existingConnection, String defaultSchema)
           at MySql.Data.Entity.MySqlHistoryContext..ctor(DbConnection existingConnection, String defaultSchema)
           at code_first_mysql.Migrations.Configuration.<>c.<.ctor>b__0_0(DbConnection conn, String schema) in C:\Users\User\Documents\Tree\New Backend\code first mysql\Migrations\Configuration.cs:line 16
           at System.Data.Entity.Migrations.History.HistoryRepository.CreateContext(DbConnection connection, String schema)
           at System.Data.Entity.Migrations.History.HistoryRepository.<GetUpgradeOperations>d__16.MoveNext()
           at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source)
           at System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
           at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b()
           at System.Data.Entity.Migrations.Infrastructure.MigratorScriptingDecorator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
           at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
           at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
           at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
           at System.Data.Entity.Migrations.Infrastructure.MigratorScriptingDecorator.ScriptUpdate(String sourceMigration, String targetMigration)
           at System.Data.Entity.Migrations.Design.ToolingFacade.ScriptUpdateRunner.Run()
           at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
           at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
           at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
           at System.Data.Entity.Migrations.Design.ToolingFacade.ScriptUpdate(String sourceMigration, String targetMigration, Boolean force)
           at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
           at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
        The given key was not present in the dictionary.
PM>更新数据库
System.Collections.Generic.KeyNotFoundException:字典中不存在给定的键。
在System.Collections.Generic.Dictionary`2.get_项(TKey)
位于MySql.Data.MySqlClient.MySqlConnectionStringBuilder.c.b_u2_7(MySqlConnectionStringBuilder msb,MySqlConnectionStringOption发送方)
位于MySql.Data.MySqlClient.MySqlConnectionStringBuilder.get_项(字符串关键字)
位于MySql.Data.MySqlClient.MySqlConnectionStringBuilder.GetConnectionString(布尔includePass)
在MySql.Data.MySqlClient.MySqlConnection.get_ConnectionString()上
在System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.b_uu12(DbConnection t,DbConnectionInterceptionContext`1c)
在System.Data.Entity.Infrastructure.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget目标,Func`3操作,TInterceptionContext拦截Context,操作`3执行,操作`3执行)
位于System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.GetConnectionString(DbConnection连接,DbInterceptionContext interceptionContext)
位于System.Data.Entity.Internal.InternalConnection.GetStoreConnectionString(数据库连接)
在System.Data.Entity.Internal.InternalConnection.OnConnectionInitialized()中
位于System.Data.Entity.Internal.InternalConnection..ctor(DbContext上下文、DbConnection existingConnection、Boolean connectionOwned)
位于System.Data.Entity.DbContext..ctor(DbConnection existingConnection,Boolean contextOwnsConnection)
位于System.Data.Entity.Migrations.History.HistoryContext..ctor(DbConnection existingConnection,String defaultSchema)
位于MySql.Data.Entity.MySqlHistoryContext..ctor(DbConnection existingConnection,String defaultSchema)
在c:\Users\User\Documents\Tree\New Backend\code first mysql\Migrations\Configuration.c.b\u 0\u 0(数据库连接连接连接,字符串模式)中的c:\Users\User\Documents\Tree\New Backend\code first mysql\Migrations\Configuration.cs:16行
位于System.Data.Entity.Migrations.History.HistoryRepository.CreateContext(数据库连接,字符串模式)
在System.Data.Entity.Migrations.History.HistoryRepository.d_u16.MoveNext()中
at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source)
位于System.Data.Entity.Migrations.Dbmigator.UpdateInternal(字符串targetMigration)
在System.Data.Entity.Migrations.DbMigrator.c__DisplayClassc.b__b()中
位于System.Data.Entity.Migrations.Infrastructure.MigratorScriptingDecorator.EnsureDatabaseExists(操作必须成功,才能使用数据库)
位于System.Data.Entity.Migrations.DbMigrator.Update(字符串targetMigration)
位于System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(字符串targetMigration)
位于System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(字符串targetMigration)
位于System.Data.Entity.Migrations.Infrastructure.MigratorScriptingDecorator.ScriptUpdate(字符串sourceMigration,字符串targetMigration)
位于System.Data.Entity.Migrations.Design.ToolingFacade.ScriptUpdateRunner.Run()处
在System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)处
在System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)处
位于System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner)
位于System.Data.Entity.Migrations.Design.ToolingFacade.ScriptUpdate(String sourceMigration、String targetMigration、Boolean force)
在System.Data.Entity.Migrations.UpdateDatabaseCommand.c__DisplayClass2.b__0()中
位于System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(操作命令)
字典中不存在给定的键。
以下是我的MySQL配置类:

internal sealed class Configuration : DbMigrationsConfiguration<ApplicationDbContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
        SetSqlGenerator("MySql.Data.MySqlClient", new MySqlMigrationSqlGenerator());
        SetHistoryContextFactory("MySql.Data.MySqlClient", (conn, schema) => new MySqlHistoryContext(conn, schema));
        CodeGenerator = new MySqlMigrationCodeGenerator();
    }

    protected override void Seed(ApplicationDbContext context)
    {}
}


public class MySqlConfiguration: DbConfiguration
{

    public MySqlConfiguration()
    {
        SetHistoryContext("MySql.Data.MySqlClient", (conn, schema) => new MySqlHistoryContext(conn, schema));
    }

}



public class MySqlHistoryContext : HistoryContext 
{
    public MySqlHistoryContext(DbConnection existingConnection, string defaultSchema) : base(existingConnection, defaultSchema)
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<HistoryRow>().Property(h => h.MigrationId).HasMaxLength(100).IsRequired();
        modelBuilder.Entity<HistoryRow>().Property(h => h.ContextKey).HasMaxLength(200).IsRequired();
    }
}

 public class MySqlInitializer : IDatabaseInitializer<ApplicationDbContext>
{

    public void InitializeDatabase(ApplicationDbContext context)
    {
        if (!context.Database.Exists())
        {
            // if database did not exist before - create it
            context.Database.Create();
        }
        else
        {
            // query to check if MigrationHistory table is present in the database 
            var migrationHistoryTableExists = ((IObjectContextAdapter)context).ObjectContext.ExecuteStoreQuery<int>(
            string.Format(
              "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '{0}' AND table_name = '__MigrationHistory'", "mydb"));

            // if MigrationHistory table is not there (which is the case first time we run) - create it
            if (migrationHistoryTableExists.FirstOrDefault() == 0)
            {
                context.Database.Delete();
                context.Database.Create();
            }
        }
    }
}
内部密封类配置:dbmigtorinsconfiguration
{
公共配置()
{
AutomaticMiggerationsEnabled=假;
SetSqlGenerator(“MySql.Data.MySqlClient”,新的MySqlMigrationSqlGenerator());
SetHistoryContextFactory(“MySql.Data.MySqlClient”,(conn,schema)=>newmysqlhistoryContext(conn,schema));
CodeGenerator=new MySqlMigrationCodeGenerator();
}
受保护的重写无效种子(ApplicationDbContext上下文)
{}
}
公共类MySqlConfiguration:DbConfiguration
{
公共MySqlConfiguration()
{
SetHistoryContext(“MySql.Data.MySqlClient”,(conn,schema)=>newmysqlhistoryContext(conn,schema));
}
}
公共类MySqlHistoryContext:HistoryContext
{
public MySqlHistoryContext(DbConnection existingConnection,string defaultSchema):base(existingConnection,defaultSchema)
{
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity().Property(h=>h.MigrationId).HasMaxLength(100).IsRequired();
modelBuilder.Entity().Property(h=>h.ContextKey).HasMaxLength(200).IsRequired();
}
}
公共类MySqlInitializer:IDatabaseInitializer
{
public void InitializeDatabase(ApplicationDbContext上下文)
{
如果(!context.Database.Exists())
{
//如果数据库以前不存在-创建它
context.Database.Create();
}
其他的
{
//查询以检查数据库中是否存在MigrationHistory表
var migrationHistoryTableExists=((IOObjectContextAdapter)上下文)。ObjectContext.ExecuteStoreQuery(
字符串格式(