EF迁移 - 已经有一个名为''在数据库中

时间:2016-07-01 10:56:58

标签: c# entity-framework migration ef-migrations

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

Add-Migration AdminSett
  

脚手架迁移' AdminSett'。这个设计师代码   迁移文件包含当前Code First模型的快照。   此快照用于计算模型的更改   脚手架下一次迁移。如果您对其进行了其他更改   您希望包含在此迁移中的模型,然后您可以   通过运行Add-Migration AdminSett'重新构建它。试。

Update-Database AdminSett
  

指定&#39; -Verbose&#39;用于查看正在应用的SQL语句的标志   到目标数据库。应用显式迁移:   [201607011035464_AdminSett]。应用显式迁移:   201607011035464_AdminSett。 System.Data.SqlClient.SqlException   (0x80131904):已经有一个名为&#39; AdminSettings&#39;在里面   数据库。在   System.Data.SqlClient.SqlConnection.OnError(SqlException异常,   布尔值breakConnection,Action 1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action 1 wrapCloseInAction)at   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject   stateObj,Boolean callerHasConnectionLock,Boolean asyncClose)at   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,   SqlCommand cmdHandler,SqlDataReader dataStream,   BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject   stateObj,布尔&amp; dataReady)at   System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(字符串   methodName,Boolean async,Int32 timeout,Boolean asyncWrite)at   System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource 1 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, DbCommandInterceptionContext 1 c)at   System.Data.Entity.Infrastructure.Interception.InternalDispatcher 1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func 3操作,TInterceptionContext interceptionContext,   行动3 executing, Action 3已执行)   System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(的DbCommand   命令,DbCommandInterceptionContext interceptionContext)at   System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery()
  在   System.Data.Entity.Migrations.DbMigrator.ExecuteSql(MigrationStatement   migrationStatement,DbConnection连接,DbTransaction   transaction,DbInterceptionContext interceptionContext)at   System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(MigrationStatement   migrationStatement,DbConnection连接,DbTransaction   transaction,DbInterceptionContext interceptionContext)at   System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable的1 migrationStatements, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinTransaction(IEnumerable 1   migrationStatements,DbTransaction事务,DbInterceptionContext   interceptionContext)at   System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinNewTransaction(IEnumerable的1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable 1   migrationStatements,DbConnection连接,DbInterceptionContext   interceptionContext)at   System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable的1 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](Func 1   操作)   System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(动作   操作)   System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable的1 migrationStatements, DbTransaction existingTransaction) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable 1   migrationStatements)at   System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable 1 migrationStatements) at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, VersionedModel targetModel, IEnumerable 1个操作,   IEnumerable的1 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   pendingMigrations,String targetMigrationId,String lastMigrationId)
  在   System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1   pendingMigrations,String targetMigrationId,String lastMigrationId)
  在System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String   targetMigration)   System.Data.Entity.Migrations.DbMigrator&LT;&GT; c__DisplayClassc.b__b()   在   System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(动作   mustSucceedToKeepDatabase)at   System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(动作   mustSucceedToKeepDatabase)at   System.Data.Entity.Migrations.DbMigrator.Update(字符串   targetMigration)   System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(字符串   targetMigration)   System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run()   在System.AppDomain.DoCallBack(CrossAppDomainDelegate   callBackDelegate)at   System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
  在System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner)   跑者)   System.Data.Entity.Migrations.Design.ToolingFacade.Update(字符串   targetMigration,Boolean force)at   System.Data.Entity.Migrations.UpdateDatabaseCommand&LT;&GT; c__DisplayClass2&LT; .ctor&GT; b__0()   在   System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(动作   命令)ClientConnectionId:dec63212-4546-48a9-bf8e-9e2b8548fcf3错误   编号:2714,状态:6,类:16已经有一个名为的对象   &#39; AdminSettings&#39;在数据库中。

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

数据库中有一个名为Admin Setting的表,你应该手动从数据库中删除它,然后运行update-database命令更新数据库。