EF迁移 - 数据库中已存在名为“'的对象

问题描述 投票:3回答:1

我在向数据库添加新表时遇到问题。这些是我在尝试添加新迁移时输入的命令:

Add-Migration AdminSett

脚手架迁移'AdminSett'。此迁移文件的Designer代码包含当前Code First模型的快照。此快照用于在您构建下一次迁移时计算模型的更改。如果对要在此迁移中包含的模型进行其他更改,则可以通过再次运行“Add-Migration AdminSett”重新构建它。

Update-Database AdminSett

指定'-Verbose'标志以查看应用于目标数据库的SQL语句。应用显式迁移:[201607011035464_AdminSett]。应用显式迁移:201607011035464_AdminSett。 System.Data.SqlClient.SqlException(0x80131904):数据库中已存在名为“AdminSettings”的对象。 System.Data.SqlClient.TdsParser.TryRun上System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,Boolean callerHasConnectionLock,Boolean asyncClose)的System.Data.SqlClient.SqlConnection.OnError(SqlException异常,Boolean breakConnection,Action1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) (在System.Data.SqlClient.SqlCommand中的System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName,Boolean async,Int32 timeout,Boolean asyncWrite)中的RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean&dataReady) .InternalExecuteNonQuery(TaskCompletionSource1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<NonQuery>b__0(DbCommand t, DbCommandInterceptionContext1 c)在System.Data.Entity.Infrastructure.Interception.InternalDispatcher1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func3操作,TInterceptionContext interceptionContext,Action3 executing, Action3执行)在System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand命令,DbCommandInterceptionContext拦截) System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery()中的ionContext) 在System.Data.Entity.Migrations.DbMigrator.ExecuteSql(MigrationStatement migrationStatement,的DbConnection连接,DbTransaction交易,DbInterceptionContext interceptionContext)在System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(MigrationStatement migrationStatement,的DbConnection连接,DbTransaction交易,DbInterceptionContext System.Data上的System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable1 migrationStatements, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinTransaction(IEnumerable1 migrationStatements,DbTransaction transaction,DbInterceptionContext interceptionContext)中的System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinNewTransaction(IEnumerable1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable1 migrationStatements,DbConnection connection,DbInterceptionContext interceptionContext)中的interceptionContext) System.Data.Entity.Migrat上System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action操作)的.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable1 migrationStatements, DbConnection connection) at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass30.<ExecuteStatements>b__2e() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.<Execute>b__0() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func1操作) System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable1 migrationStatements, DbTransaction existingTransaction) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable1 operations,IEnumerable1 migrationStatements) at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, VersionedModel targetModel, IEnumerable1 pendingMigrations,String targetMigrationId,String lastMigrationId)中的ions.DbMigrator.ExecuteStatements(IEnumerable1 systemOperations, Boolean downgrading, Boolean auto)
at System.Data.Entity.Migrations.DbMigrator.ApplyMigration(DbMigration migration, DbMigration lastMigration) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ApplyMigration(DbMigration migration, DbMigration lastMigration) at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable
1 migrationStatements) 在System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations,String targetMigrationId,String lastMigrationId) 在System.Data.Entity.Migrations.DbMigrator.UpdateInternal(字符串targetMigration)在System.Data.Entity.Migrations.DbMigrator。<> c__DisplayClassc.b__b()在System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(动作mustSucceedToKeepDatabase)在在System.Data.Entity.Migrations.DbMigrator.Update(字符串targetMigration)在System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(字符串System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(动作mustSucceedToKeepDatabase) targetMigration)在System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run()在System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)在System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate) 在System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)的System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)处于System.Data.Entity.Migrations.UpdateDatabaseCommand的System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration,Boolean force)。 <> c__DisplayClass2 <构造函数。> b__0()在System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(动作命令)ClientConnectionId:dec63212-4546-48a9-bf8e-9e2b8548fcf3错误编号:2714,状态:6,等级:16数据库中已有一个名为“AdminSettings”的对象。

同样在数据库I的_Migrations表中,没有用于迁移的行,其名称为:AdminSett

c# entity-framework migration ef-migrations
1个回答
0
投票

当我试图找出为什么我的在线azure数据库不接受我的更新命令抱怨同样的问题时,我偶然发现了这个问题。

在检查_EFMigrationHistory表时,我发现在线数据库丢失了几个已经发生在在线数据库中的迁移条目(不知道为什么会这样,可能是我将数据传输上传到数据库而且不包含_EFMigrationHistory表? )。

无论如何,我通过将所有相关的迁移从本地复制到在线数据库来解决问题,以便EF知道它应该从哪个迁移开始运行。

© www.soinside.com 2019 - 2024. All rights reserved.