Ich schreibe eine Web-API, die an eine Datenbank angehängt ist, die ich mit Model First erstellt habe.Deaktivieren von Migrationen
Als neu war ich verwirrte Modell zuerst mit Code zuerst.
Da es sich um meine erste EF/Web App handelt, habe ich nicht realisiert, dass die Migration von Model First noch nicht implementiert wurde und ich habe das Verfahren zur Implementierung verfolgt. Als es lief, habe ich ein paar Fehler bekommen, habe nachgesehen und erst dann bemerkt, dass ich es wieder entfernen muss.
Den Anweisungen von jemandem folgend löschte ich den Migrationsordner und die Tabelle _migrationHistory aus der Datenbank.
Aber jetzt bekomme ich die folgende Ausnahme, wenn die Tabelle _migrationhistory in der Datenbank fehlt.
protected void Application_Start()
{
// Call initializer
Database.SetInitializer(new PulseDbInitializer());
new ApplicationDbContext().Database.Initialize(true); <- error here
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
„Eine Ausnahme vom Typ‚System.NotSupportedException‘aufgetreten in EntityFramework.dll wurde aber in Benutzercode Zusätzliche Informationen nicht behandelt. Modell Kompatibilität nicht überprüft werden kann, da die Datenbank nicht Modell Metadaten enthält Modell Kompatibilität kann nur für Datenbanken überprüft werden, die mit Code First oder Code First Migrations erstellt wurden. "
Das folgende ist eine teilweise Beschreibung meiner initializer
public partial class PulseDbInitializer : DropCreateDatabaseIfModelChanges<ApplicationDbContext>, IPulseDbInit
//public partial class PulseDbInitializer :DropCreateDatabaseAlways<ApplicationDbContext>, IPulseDbInit
{
private ApplicationDbContext _context;
protected override void Seed(ApplicationDbContext context)
{
_context = context;
var pid = new PulseDbInitializionData(context);
pid.Init(this);
}
}// class PulseDbInitializer
Es scheint, dass die App-Migrationen zu verwenden versucht, (weil es die _migrationhistory Tabelle erstellen), obwohl ich den Migrationen Unterordner entfernt haben. Da ich neu hier bin, bin ich mir nicht sicher, wohin ich gehen soll. Mir ist bewusst, dass ich meinen Initialisierer erstellt habe, siehe oben, also fehlt mir etwas?
EDIT - zu lang für einen Kommentar
Im nicht sicher, dass wir sie sind zu verstehen.
Ganz einfach, ich weiß nicht, was die Tabelle _MigrationHistory in meiner Datenbank als afaik generiert, wenn ich das Unterverzeichnis Migration aus meinem Projekt lösche und die Datenbank lösche, dann dachte ich, das ist alles, was ich tun muss, um Migrationen fallen zu lassen.
In meinem Modell ist das DropCreateDatabaseIfModelChanges das, was ich immer zum Generieren der Datenbank verwendet habe und funktioniert wie erwartet. Es erstellt eine neue Datenbank oder wird neu erstellt, wenn sich das Modell ändert.
Bis ich die Migration hinzugefügt habe, habe ich diese _MigrationHistory-Tabelle nicht bemerkt und ich habe keine Ahnung, ob der Befehl add-migration meinem Projekt Code hinzugefügt hat, den ich löschen oder ändern muss (ich hasse Dinge wirklich und nicht genau gesagt, was in einer Art von Protokoll getan wurde. Bitte Microsoft, für zukünftige Referenz)
Oder bin ich total falsch und die _MigrationHistory Tabelle war immer da, aber ich habe nie bemerkt? Es scheint alles zu funktionieren, solange ich den Tisch nicht entferne.
Die DropCreateDatabaseAlways, die Sie kommentiert haben herausarbeiten sollte. http://StackOverflow.com/questions/29349443/why-model-compatibility-cannot-be-checked –
@SteveGreene ja, aber das würde fallen lassen und die Datenbank bei jeder Initialisierung neu erstellen, nicht wahr? – Jcl
Ja, führe es einmal aus und wechsle dann zurück zu DropCreateDatabaseIfModelChanges –