2016-07-08 4 views
0

Ich ging fälschlicherweise davon aus, dass EF, wenn ich eine Tabelle in der Datenbank löschte, beim nächsten Update-Update eine leere Tabelle neu erstellen würde.Gelöschte Tabelle in der Datenbank. Wie bekomme ich Entity Framework um es neu zu erstellen?

Jetzt habe ich eine fehlende Tabelle, so dass die Anwendung jedes Mal eine Ausnahme auslöst, wenn sie eine Referenz darauf trifft.

Gibt es eine Möglichkeit, EF anzuweisen, die Tabelle neu zu erstellen, ohne die Datenbank vollständig zu löschen?

+0

konnten Sie die Tabelle nicht einfach mit dem Befehl 'create table' neu erstellen? – Kritner

+0

Nicht sicher, ob es möglich ist, aber für das nächste Mal, wenn Sie eine Tabelle säubern und wie eine neue aussehen lassen wollen, ohne sie zu löschen, würde ich Ihnen empfehlen, den 'truncate table' Befehl – Rafa

Antwort

0

Das Problem ist, EF die Tabelle hat darin Snapshot mit der letzten Migration ist, wenn Sie also EF es neu erstellen möchten können Sie dies tun:

1) vorübergehend die Klasse entfernen, indem das DbSet und OnModelCreating Auskommen (wenn vorhanden).

2) Führen Sie eine Migration aus, damit EF die Tabelle aus dem Snapshot entfernt. Sie müssen den Code in der Up() -Methode auskommentieren, die die Tabelle entfernt, da sie bereits gelöscht wurde.

3) Kommentieren Sie Schritt 1 Code.

4) Führen Sie eine weitere Migration durch, um die Tabelle wieder hinzuzufügen.

https://msdn.microsoft.com/en-US/data/dn481501?f=255&MSPPError=-2147217396

+0

zu verwenden Die Tabelle 'dbo.TableName' kann nicht gelöscht werden, da sie nicht vorhanden ist oder keine Berechtigung vorliegt. ' – Guerrilla

+1

Sie müssen den Befehl' Ablage 'in der Up() - Methode auskommentieren. –

0

einfach die Tabelleneigenschaft Kommentar von DbContext Und Update.After Der Un Comment die Eigenschaft und Aktualisieren Dies wird eine neue Tabelle erstellen, ohne die gesamte Datenbank löschen (Dies funktioniert für mich Während Paket-Manager-Konsole Aktualisierung durch)

+0

Ich denke, das Problem ist Tabelle hat eine viele zu viele Beziehung mit meiner Hauptdatentabelle als es mich nicht tun lassen – Guerrilla

0

1) erstellen Sie die Datenbank lokal auf Ihrem Computer von Grund auf neu

2) mit SSM die Datenbank öffnen, und wählen Sie die gewünschte Tabelle

3), klicken Sie die rechte Maus auf dem Tisch, und wählen Sie „Skript Tabelle als“ und dann auf „Create To“ -> das wird die Tabellenerstellung als SQL-Zeichenfolge

4) excute die Abfrage erzeugen erzeugen mit in die Anwendung ExecuteSqlCommand

Beispiel von meinem PC:

string toBeCreatetable = @" 
CREATE TABLE [dbo].[Customers]( 
    [CustomerId] [int] IDENTITY(1,1) NOT NULL, 
    [Name] [nvarchar](max) NULL, 
CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED 
( 
    [CustomerId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]"; 

// Somewhere in code before at the begin do:  
using (var ctx = new myDbContext(toBeCreatetable)) 
{ 
    int executed= myDbContext.Database.ExecuteSqlCommand() 
} 

Dies ist die beste Art und Weise, die, dass die Migrationsgeschichte garantieren mit dem konzeptionellen Modell richtig funktionierte sein wird.

Verwandte Themen