Wie um zu überprüfen, ob Datenbank-schema entspricht, Entity Framework schema?
Meiner überraschung, mit dem CreateDatabaseIfNotExists Kontext-Initialisierung, die Linie
context.Database.Initialize(true)
nicht eine exception werfen, wenn das schema entspricht nicht meinem ersten code-schema.
Gibt es eine Möglichkeit zu überprüfen, ob die aktuelle Datenbank passt gut in unser schema vor, zum Beispiel, wir versuchen, auf eine Entität, deren Tabelle existiert nicht auf der Datenbank mehr, und eine Ausnahme wird ausgelöst durch EF?
- es ist jetzt github.com/reckface/EntityFramework.Verify via @reckface für diesen Zweck
- Besser jetzt als nie! Schade, dass ich nicht verwenden, EF mehr 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie anrufen CompatibleWithModel, um zu bestimmen, wenn die Datenbank entspricht dem Modell. Wenn Sie den parameter auf true setzen, es wird eine exception werfen wenn kein Modell die Daten in der Datenbank gefunden.
EF nicht cross-check-Datenbank-schema mit Modell jedes mal, wenn Sie die Anwendung starten. Es ist stattdessen auf der Suche für das Modell, das in der Datenbank gespeichert werden (__MigrationsHistory Tisch und vor EdmMetadata) und vergleichen Sie diese gespeicherten Modells mit dem Modell, das Sie verwenden. Wenn Modelle übereinstimmt, dann wird die Datenbank verwendet werden. Wenn Modelle nicht übereinstimmen, wird eine Ausnahme geworfen. Wenn Sie weder __MigrationHistory noch EdmMetadata Tabelle in Ihrer Datenbank zu EF wird davon ausgegangen, dass Sie zunächst die Datenbank-Ansatz mit DbContext und Ihre Datenbank entspricht dem Modell. Wenn Sie möchten, vergleichen Sie die Datenbank mit Ihrem Modell konnten Sie dump Edmx für Ihr Modell (mit EdmxWriter.WriteEdmx) und verwenden Sie die Visual Studio-und EF-designer Holen Sie sich die Edmx aus der Datenbank und vergleichen SSDL Teile.
FileNotFoundException
mit einer Erklärung, welche Datei fehlt und wo es zu bekommen ist weitaus nützlicher als einNullReferenceException
sich aus der Datei nicht gefunden und den code weiter ausführen.