Повторно создать таблицу с Entity Framework 5 и nuget

Я использую 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(TaskCompletionSource 1 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(IEnumerable 1 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(IEnumerable 1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable
1 pendingMigrations, String targetMigrationId, String lastMigrationId)
в 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 воссоздать таблицу?

Ответы

Ответ 1

Я нашел ответ.

Я удалил строку в [dbo]. [__ MigrationHistory], которая соответствовала моей миграции

Затем я удалил новый файл миграции

Я перезапустил add-migration

а затем повторно запустить update-database -verbose

Ответ 2

Вы можете просто удалить базу данных, затем из консоли диспетчера пакетов запустите команду "update-database", все будут воссозданы, включая все сделанные вами обновления.

Ответ 3

Есть несколько вариантов, которые я сохраняю в своем арсенале для первых кодов миграции, и они зависят от того, почему вам нужно удалять таблицы или удалять записи. Вот мои методы:

  • Если вы изменили модели, и сопоставления вызывают ошибку, которая мешает вам не обновлять таблицы, вы можете удалить всю базу данных с помощью 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