0

Ich habe eine Anwendung, die Entity Framework 6 (Datenbank zuerst) verwendet. Meine Datenbank existiert bereits, aber ich möchte meine Anwendung in einer neuen Umgebung ausführen können und den Code die Datenbank und Tabellen erstellen lassen, wenn sie nicht bereits vorhanden sind.Wie kann ich eine Datenbank und Tabellen zur Laufzeit mit Entity Framework 6 erstellen?

Wie kann dies in Entity Framework 6 erreicht werden? Ich habe ältere Beispiele gesehen, die DbContext.CreateDatabase() verwenden, aber diese Methode ist in EF6 nicht verfügbar. Für was es wert ist, ist die Datenbank in SQL Azure.

EDIT: einige Leute haben vorgeschlagen, die CreateDatabaseIfNotExists-Initialisierungsstrategie, die angeblich der Standard ist. Leider bekomme ich einen Fehler, wenn ich versuche, die Anwendung in einer neuen Umgebung auszuführen, in der die Datenbank noch nicht erstellt wurde. Vielleicht liegt das daran, dass ich mit Sql Azure arbeite? Der Fehler wird behoben, wenn ich die Datenbank und die Tabellen manuell erstelle. Hier ist die Fehlermeldung:

Ausnahme geworfen: 'System.Data.SqlClient.SqlException' in System.Data.dll

Zusätzliche Informationen: Datenbank kann nicht geöffnet "MyExampleDatabase" von der Anmeldung angefordert. Die Anmeldung ist fehlgeschlagen.

Anmeldung fehlgeschlagen für Benutzer 'ExampleUser'.

Beachten Sie, dass die Ausnahme ein Authentifizierungsfehler zu sein scheint, aber das ist nicht der Fall. Ich habe überprüft, dass die Anmeldeinformationen und die Verbindungszeichenfolge gültig sind. Die Anwendung funktioniert gut und ist in der Lage, Aktualisierungen der Datenbank vorzunehmen, nachdem ich die Tabellen db & manuell erstellt habe. Aber ich möchte, dass die Anwendung die Datenbank und die Tabellen zur Laufzeit automatisch erstellen kann, wenn sie nicht bereits existieren.

+3

Schauen Sie sich EF6 Code First & Migrationen – Alex

+0

Research [Initialisierungsstrategien] (http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx). Der offensichtlichste Kandidat ist 'CreateDatabaseIfNotExists', was eigentlich das Standardverhalten ist. –

+0

Hat ExampleUser die erforderlichen Rechte zum Erstellen einer Datenbank am gewünschten Speicherort? –

Antwort

0

Danke für das Feedback. Ich konnte das Problem lösen, indem ich mein ADO.NET-Entitätsmodell mit der Option "Code First from database" (in Visual Studio 2015) neu erstellte. Zuvor habe ich die Option "EF Designer from database" verwendet. Offensichtlich musste ich mich für "Code-First" entscheiden, um diese Eigenschaft von EF zu nutzen.

0

Der beste Weg, um sicherzustellen, dass Sie bekommen, was Sie wollen, ist die Erstellung von der Initialisierung zu trennen.

Für die Erstellung der Datenbank würde ich die Azure REST-APIs oder (wenn Sie können) das Microsoft.Azure.Management.Sql NuGet-Paket verwenden. Wenn Sie eine Datenbank mit dieser API erstellen, können Sie angeben, welche Performance-Stufe Sie verwenden möchten und welche den Preis bestimmt.

Zur Initialisierung können Sie EF wie Sie verwenden normalerweise tun würde

Verwandte Themen