使用 Entity Framework 5 和 nuget 重新创建表 [英] Re-create table with Entity Framework 5 and nuget
问题描述
我正在使用 Code First 创建表.
I am using Code First to create a table.
我创建了类、映射文件并在 nuget 中发出了 add-migration 命令,然后是 update-database 命令
I created the class, the mapping file and issued the add-migration command in nuget and then the update-database command
然后我改变了班级,像个白痴一样删除了表格.
I then changed the class and like an idiot deleted the table.
我删除了迁移类文件
我发出了添加迁移命令
当我发出更新数据库命令时,我收到以下错误:
When I issue the update-database command I get the following error:
System.Data.SqlClient.SqlException (0x80131904):找不到对象dbo.CorrectiveActionPlan",因为它不存在或者你存在没有权限.在System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,Boolean breakConnection, Action1 wrapCloseInAction) atSystem.Data.SqlClient.SqlInternalConnection.OnError(SqlException异常,布尔 breakConnection,Action
1 wrapCloseInAction) 在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObjectstateObj, Boolean callerHasConnectionLock, Boolean asyncClose) atSystem.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler、SqlDataReader 数据流、BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObjectstateObj, Boolean &数据就绪)在System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(字符串方法名,布尔异步,Int32 超时)在System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1完成,字符串方法名,布尔型 sendToPipe,Int32 超时,布尔 asyncWrite) 在System.Data.SqlClient.SqlCommand.ExecuteNonQuery() 在System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction事务,MigrationStatement 迁移语句)在System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(DbTransaction事务,MigrationStatement 迁移语句)在System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable
1迁移声明)在System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable1迁移声明)在System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(字符串migrationId、XDocument targetModel、IEnumerable
1 个操作、布尔值降级,布尔自动)在System.Data.Entity.Migrations.DbMigrator.ApplyMigration(DbMigration迁移,DbMigration lastMigration)在System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ApplyMigration(DbMigration迁移,DbMigration lastMigration)在System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable1pendingMigrations, 字符串 targetMigrationId, 字符串 lastMigrationId)
1pendingMigrations, 字符串 targetMigrationId, 字符串 lastMigrationId)
在System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable
在 System.Data.Entity.Migrations.DbMigrator.Update(字符串目标迁移)在System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(字符串目标迁移)在System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore()在 System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()ClientConnectionId:a6e92a35-cc9e-4867-97a5-0a274081d853 找不到对象dbo.CorrectiveActionPlan",因为它不存在或者您没有权限.
System.Data.SqlClient.SqlException (0x80131904): Cannot find the object "dbo.CorrectiveActionPlan" because it does not exist or you do not have permissions. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean 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, Boolean& dataReady) at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable
1 migrationStatements) at System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable1 migrationStatements) at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable
1 operations, 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(IEnumerable1 pendingMigrations, String targetMigrationId, String lastMigrationId)
1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable
at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration) at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore() at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run() ClientConnectionId:a6e92a35-cc9e-4867-97a5-0a274081d853 Cannot find the object "dbo.CorrectiveActionPlan" because it does not exist or you do not have permissions.
如何强制 EF 重新创建表?
How do I force EF to recreate the table?
推荐答案
我找到了答案.
我删除了 [dbo].[__MigrationHistory] 中与我的 Migration 对应的行
I deleted the row in [dbo].[__MigrationHistory] that corresponded to my Migration
然后我删除了新的迁移文件
I then deleted the new migration file
我重新运行了添加迁移
然后重新运行 update-database -verbose
and then re-ran update-database -verbose
这篇关于使用 Entity Framework 5 和 nuget 重新创建表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!