我有使用链接到MySQL数据库的Code First Entity Framework 6的Asp.Net MVC 5应用程序.

当我第一次创建数据库时,它工作正常.但是,当我对模型进行更改时,请添加迁移. (Update-Database)之后显示错误.

这是错误:

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.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.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.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.

这些是我的MySQL配置类:

internal sealed class Configuration : DbMigrationsConfiguration

{

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().Property(h => h.MigrationId).HasMaxLength(100).IsRequired();

modelBuilder.Entity().Property(h => h.ContextKey).HasMaxLength(200).IsRequired();

}

}

public class MySqlInitializer : IDatabaseInitializer

{

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(

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();

}

}

}

}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐