2012-11-15 15 views
16

I Code Zuerst bin mit einer Tabelle zu erstellen.neu erstellen Tabelle mit Entity Framework 5 und NuGet

habe ich die Klasse, die Zuordnungsdatei und ausgegeben, um den Add-Migrationsbefehl in nuget und dann dem Update-Datenbank Befehl

ich die Klasse dann geändert und wie ein Idiot löschte den Tisch.

löschte ich die Migration Klassendatei

Ich gab einen Add-Migrationsbefehl

Wenn ich den Update-Datenbank Befehl, den ich die folgende Fehlermeldung ausgeben:

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(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) at System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable 1 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(IEnumerable 1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable
1 pendingMigrations, String targetMigrationId, String lastMigrationId)
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.

Wie erzwinge ich EF um den Tisch neu zu erstellen?

Antwort

31

fand ich meine Antwort.

löschte ich die Zeile in [dbo]. [__ MigrationHistory], die zu meiner Migration entsprach

ich die neue Migrationsdatei

ich wieder ran Add-Migration

und dann anschließend gelöscht erneut -ran update-Datenbank -verbose

+0

Du hast mir die Zeit gerettet! – Pinch

+0

Du hast mir auch ernsthafte Zeit gerettet!:)) – Xenon

+1

Du bist der König des Dschungels! –

-1

Sie nur die Datenbank dann Befehl aus dem Paket-Manager-Konsole ausführen der ‚update-Datenbank‘ fallen könnten, würden alle einschließlich jeglicher Updates neu erstellt werden Sie gemacht.

+0

Es sei denn, es wurden Daten benötigt. –

+0

@Eric: True, aber ich bot eine direkte Antwort auf seine Frage an (Wie zwinge ich EF, die Tabelle neu zu erstellen?) - Schlüsselwort dort wird "neu erstellen" –

0

Es gibt ein paar Optionen, die ich in meinem Arsenal für Code-erste Migrationen und sie hängen davon ab, warum Sie Tabellen löschen oder die Datensätze löschen müssen. Hier ist meine Methoden:

  • Wenn Sie verändert die Modelle und die Mappings einen Fehler verursachen, die Sie verhindert nicht die Tabellen aktualisieren zu können, könnten Sie Löschen Sie die gesamte Datenbank SQL Management Server Studio mit & Löschen der Migrationsordner Sie können ein Skript speichern, um Ihre Testdaten mithilfe eines SQL-Skripts neu zu füllen, oder Ihre Datei Configuration.cs speichern. Wenn Sie den Befehl update database ausführen, werden die Daten erneut ausgefüllt. Hier

    ist ein Beispiel-Skript für eine gespeicherte Prozedur nur Tabellendaten löschen:

    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 ?' 
    
  • Wenn Sie nur die Daten löschen wollen Sie den Paket-Manager-Konsole Befehl verwenden können: PM> Update-Database -TargetMigration $InitialDatabase & löschen Sie die Migration Datei erstellt zB: '201502210525393_example_with_error.cs' und erneut 'Add-Migration new_example.cs' erneut ausführen. Dadurch wird die Datenbank wieder in seine Anfangssnapshot

  • Oder Sie Ihre Methode verwenden: Löschen Sie die Zeile in [dbo].[__MigrationHistory] & Migrationsdatei heißt: ‚201502210525393_example_with_error.cs‘ dann erneut ausgeführt add-migration und update-database

Verwandte Themen