Ответ 1
Я нашел ответ.
Я удалил строку в [dbo]. [__ MigrationHistory], которая соответствовала моей миграции
Затем я удалил новый файл миграции
Я перезапустил add-migration
а затем повторно запустить update-database -verbose
Я использую Code First для создания таблицы.
Я создал класс, файл сопоставления и выпустил команду add-migration в nuget, а затем команду update-database
Затем я изменил класс и, как идиот, удалил таблицу.
Я удалил файл класса миграции
Я выпустил команду add-migration
Когда я выдаю команду update-database, я получаю следующую ошибку:
System.Data.SqlClient.SqlException(0x80131904): не удается найти объект "dbo.CorrectiveActionPlan", потому что его нет или вы делаете не имеют разрешений. в System.Data.SqlClient.SqlConnection.OnError(исключение SqlException, Boolean breakConnection, Action
1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 wrapCloseInAction) при System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) при System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean & dataReady) в System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout) в 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) в System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable1 migrationStatements) at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable
1 операция, Boolean понижение, Boolean auto) при 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(IEnumerable1 pendingMigrations, String targetMigrationId, String lastMigrationId)
1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable
в System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) в System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration) в System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore() в System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run() ClientConnectionId: a6e92a35-cc9e-4867-97a5-0a274081d853 Не удается найти объект "dbo.CorrectiveActionPlan", потому что он не существует или вы не имеют разрешений.
Как заставить EF воссоздать таблицу?
Я нашел ответ.
Я удалил строку в [dbo]. [__ MigrationHistory], которая соответствовала моей миграции
Затем я удалил новый файл миграции
Я перезапустил add-migration
а затем повторно запустить update-database -verbose
Вы можете просто удалить базу данных, затем из консоли диспетчера пакетов запустите команду "update-database", все будут воссозданы, включая все сделанные вами обновления.
Есть несколько вариантов, которые я сохраняю в своем арсенале для первых кодов миграции, и они зависят от того, почему вам нужно удалять таблицы или удалять записи. Вот мои методы:
Если вы изменили модели, и сопоставления вызывают ошибку, которая мешает вам не обновлять таблицы, вы можете удалить всю базу данных с помощью SQL Management Server Studio и удалить папку миграции Возможно, вам захочется сохранить script, чтобы повторно заполнить ваши тестовые данные с помощью sql script или сохранить файл Configuration.cs, и при выполнении команды базы данных обновления данные будут повторно заполнены.
Ниже приведен пример script для хранимой процедуры просто удалить данные таблицы:
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> Update-Database -TargetMigration $InitialDatabase
и удалить файл миграции, созданный, например: "201502210525393_example_with_error.cs" и повторный запуск "Add-Migration new_example.cs" ' еще раз. Это возвращает базу данных обратно в начальный снимок
Или вы можете использовать свой метод: удалите строку в [dbo].[__MigrationHistory]
и файл миграции, то есть: '201502210525393_example_with_error.cs', а затем запустите add-migration
и update-database