Entity framework 使用实体框架5和nuget重新创建表

Entity framework 使用实体框架5和nuget重新创建表,entity-framework,nuget,entity-framework-migrations,Entity Framework,Nuget,Entity Framework Migrations,我首先使用代码创建一个表 我创建了类和映射文件,并在nuget中发出了addmigration命令,然后是updatedatabase命令 然后我改变了课程,像个白痴一样删除了表格 我删除了迁移类文件 我发出了添加迁移命令 发出“更新数据库”命令时,出现以下错误: System.Data.SqlClient.SqlException(0x80131904):找不到 对象“dbo.CorrectiveActionPlan”,因为它不存在或您不存在 没有权限。在 System.Data.SqlCli

我首先使用代码创建一个表

我创建了类和映射文件,并在nuget中发出了addmigration命令,然后是updatedatabase命令

然后我改变了课程,像个白痴一样删除了表格

我删除了迁移类文件

我发出了添加迁移命令

发出“更新数据库”命令时,出现以下错误:

System.Data.SqlClient.SqlException(0x80131904):找不到 对象“dbo.CorrectiveActionPlan”,因为它不存在或您不存在 没有权限。在 System.Data.SqlClient.SqlConnection.OnError(SqlException异常, 布尔断开连接,操作
1 wrapCloseInAction)位于
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException
异常,布尔断开连接,操作
1 wrapCloseInAction)位于 System.Data.SqlClient.TdsParser.ThroweException和Warning(TdsParserStateObject stateObj、布尔调用方连接锁、布尔异步关闭)位于 System.Data.SqlClient.TdsParser.TryRun(运行行为, SqlCommand cmdHandler、SqlDataReader数据流、, BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj、Boolean和dataReady)位于 System.Data.SqlClient.SqlCommand.RunExecuteOnQueryTds(字符串 methodName、布尔异步、Int32超时) System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource
1
完成,字符串方法名,布尔sendToPipe,Int32超时,
布尔异步(写)在
System.Data.SqlClient.SqlCommand.ExecuteNonQuery()位于
System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction
事务,迁移语句迁移语句)位于
System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(DbTransaction
事务,迁移语句迁移语句)位于
System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable
1 迁移状态)位于 System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable
1
迁移状态)位于
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(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.Update(字符串 目标(迁移)在 System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(字符串 目标(迁移)在 System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore() 位于System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()处 客户端连接ID:a6e92a35-cc9e-4867-97a5-0a274081d853找不到 对象“dbo.CorrectiveActionPlan”,因为它不存在或您 没有权限

如何强制EF重新创建表格?

我找到了答案

我删除了[dbo].[u_MigrationHistory]中与我的迁移相对应的行

然后我删除了新的迁移文件

我重新运行了添加迁移


然后重新运行updatedatabase-verbose

您只需删除数据库,然后从包管理器控制台运行“updatedatabase”命令,所有这些都将被重新创建,包括您所做的任何更新。

对于代码优先迁移,我的库中保留了一些选项,它们取决于您需要删除表或删除记录的原因。以下是我的方法:

  • 如果修改了模型,并且映射导致错误,使您无法更新表,则可以使用SQL Management Server Studio删除整个数据库并删除迁移文件夹您可能希望保存脚本以使用SQL脚本重新填充测试数据,或者保存Configuration.cs文件,当您执行更新数据库命令时,将重新填充数据

    下面是一个用于存储过程删除表数据的脚本示例:

    USE [DatabaseName]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE PROCEDURE [dbo].[sp_DeleteAllYardPenaltyRecords]
    AS
    EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
    EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
    EXEC sp_MSForEachTable 'DELETE FROM ?'
    EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
    EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
    EXEC sp_MSFOREACHTABLE 'SELECT * FROM ?'
    
  • 如果您只想删除数据,可以使用软件包管理器控制台命令:
    PM>更新数据库-TargetMigration$InitialDatabase
    &删除创建的迁移文件,即:“20150221052393_example_with_error.cs”,然后再次运行“Add migration new_example.cs”。这将使数据库返回其初始快照

  • 或者您可以使用您的方法:删除
    [dbo].[uuuuu MigrationHistory]
    &迁移文件中的行,即:“20150221052393\u example\u with_error.cs”,然后重新运行
    添加迁移
    更新数据库


你帮我省了不少时间!你也为我节省了严肃的时间!:)你是丛林之王!在我的情况下,它只有在我放下桌子后才起作用,但谢谢你为我指明了正确的方向!指向当前主题的便捷链接-除非其中包含所需的数据。@Eric:是的,但我对他的问题提供了一个直接的答案(我如何强制EF重新创建表格?)-关键词是“重新创建”是的,但并非所有来到这里的人都有与OP完全相同的情况。只是为找到答案的其他人添加了警告(还有,不是我的反对票)。