2012-04-09 6 views
1

Durch das Entfernen der EdmMetadata-Tabelle in EF 4.3 scheint DropCreateDatabaseIfModelChanges nicht mehr zu funktionieren. macht es?Was ist mit DropCreateDatabaseIfModelChanges in EF 4.3 passiert?

ODER

Gibt es eine Möglichkeit initializer zu erklären, wie ich 4.2 in SEED-Methode von EF tun?

+0

was meinst du mit ‚nicht durch die Beseitigung EdmMetadata Tabelle funktioniert‘? DropCreateDatabaseIfModelChanges hat immer die gesamte Datenbank gelöscht, wenn ein Unterschied zwischen EdmMetadata und dem code-basierten Schema festgestellt wird. –

Antwort

3

EdmMetadata ist in EF 4.3 Code First-Modellen veraltet, stattdessen wird _MigrationHistory Tabelle verwendet, um die Kompatibilität zwischen Modell und Datenbank zu überprüfen.

(Beachten Sie, dass die _MigrationHistory Tabelle eine Systemtabelle, wenn möglich gemacht wird. Das bedeutet, dass es sehen Sie die „Systemtabellen“ in SQL Management Studio oder Ihr bevorzugtes Werkzeug erweitern. Möglicherweise müssen)

In EF 4.3 Wenn DbContext mit dem Code First-Ansatz verwendet wird, versucht Database.Create Code First Migration zu verwenden, um die Datenbank zu erstellen und DDL durchzuführen. Database.Create führt eine erste automatische Migration für Sie durch. Im Rahmen dieses Prozesses erstellen Migrationen eine Tabelle mit dem Namen _MigrationHistory und fügen eine Zeile in diese Tabelle ein, die eine komprimierte Version Ihres Code First-Modells enthält. DropCreateDatabaseIfModelChanges Initialisierer verwenden die Database.CompatibleWithModel-Methode, um zu bestimmen, ob das erste Code-Modell mit dem Modell übereinstimmt, das zum Erstellen der Datenbank verwendet wurde, indem es _MigrationHistory Tabelle überprüft.

http://blog.oneunicorn.com/2012/01/13/ef-4-3-beta-1-what-happened-to-that-edmmetadata-table/

+0

Zuerst vielen Dank für Ihre nützliche Antwort, aber ich weiß bereits über Migrationen und _MatrationHistory-Tabelle, Das Hauptproblem sind erste Datensätze, die ich in EF 4.2 einfügen konnte. (Bevor ich EF 4.3 beim Wechsel des Modells gehen konnte ich ein Beispiel einfügen Datensätze in DB durch Überschreiben der ** Seed ** -Methode) Was ist die Lösung dafür in EF 4.3? –

+1

Sie können weiterhin in der Seed-Methode von CreateDatabaseIfNotExists oder DropCreateDatabaseIfModelChanges wie in EF 4.2 überschreiben. Aber Ihre alten Daten gehen verloren, wenn Sie sie mit DropCreateDatabaseIfModelChanges verwenden. Um alte Daten in EF 4.3 beizubehalten, verwenden Sie AddOrUpdate in der Seed-Methode der Configuration-Klasse. –