5

Ich verwende EF seit einiger Zeit, immer im Model-First Ansatz. Jetzt bin ich Abenteuer durch Code-First Länder. Die Sache ist: Ich hatte Probleme mit der automatischen Tabellenerstellung.EntityFramework erstellt keine Tabellen

Nach einigen Seiten ist es möglich. Und ich habe ihren Ansatz ohne Erfolg versucht.

Hier ist eines der Dinge, die ich versucht habe: Database.CreateIfNotExists()

Kein Glück ...

Meine Verbindungszeichenfolge ist perfekt und arbeiten. Wenn ich die Tabelle manuell hinzufüge, funktioniert es. Das Problem ist, wenn ich die Tabelle nicht erstellt habe. Es schafft einfach nicht so, wie ich es gesagt habe.

Meine Klassen sind korrekt dekoriert. (Nochmal: Es funktioniert, wenn ich die DBs erstellt habe)

Irgendwelche Vorschläge? Funktioniert dieses Feature wirklich?

Ich verwende:

Visual Studio 2010 Professional

EntityFramework 4.3.1 (obwohl ich mit 4.1 auch versucht)

SQL Server 2008 R2

Dank im Voraus.

+0

Haben Sie Ihre eigene Kontextklasse erstellt, die von DbContext abgeleitet ist? und dann einen Aufruf machen, der DbSet Entities innerhalb des Kontexts verwenden würde – Sergey

+2

Database.CreateIfNotExists() bewirkt nur, dass EF die Tabelle erstellt, wenn die Datenbank selbst nicht existiert (in diesem Fall erstellt sie die Datenbank und die Tabelle). Es wird nicht automatisch die Tabelle erstellen, wenn eine Datenbank existiert, aber die Tabelle fehlt. Ist das vielleicht, worauf Sie stoßen? –

+0

@Sergey Ja, das habe ich getan. – eestein

Antwort

5

Es gibt drei Datenbankinitialisierer, die im Entitätsframework enthalten sind. Sie implementieren alle IDatabaseInitializer<Context> Schnittstelle. Sie sind:

  • CreateDatabaseIfNotExist (default)
  • DropCreateDatabaseWhenModelChanges
  • DropCreateDatabaseAlways

Wie Sie die Standard-API sehen nicht die Initialisierer hat, die nur Tabellen erstellt, sondern es macht die ganze Datenbank. Es gibt jedoch andere Initialisierer, die Leute erstellt haben, da gibt es einen, der genau dasselbe macht, was Sie wollen.

Es ist in dem Nuget Paket EFCodeFirst.CreateTablesOnly

Eine weitere Option ist Ihre eigenen initializer zu erstellen, wenn das ist etwas, was Sie wirklich brauchen.

+0

Danke für Ihre Antwort. Später heute Abend werde ich das versuchen und Sie wissen lassen, wie es gelaufen ist, indem ich die Antwort akzeptiert habe. Danke noch einmal! – eestein

+0

Gern geschehen :) – Sergey

+0

Das hat funktioniert, danke Mann. – eestein

Verwandte Themen