Hier sind die Pakete, die ich installiert habe: Installierte Pakete
Ich verwende Entityframework Core 2.0. Zum ersten Mal habe ich erfolgreich eine Datenbank erstellt, indem ich die erste Migration des Entity Framework-Codes verwendet habe (add-migration und update-database command). Jetzt, wenn ich meine Entitäten aktualisiere und versuche, die Migration auszuführen, gibt es einen folgenden Fehler.
Es konnte kein Objekt vom Typ 'DataContext' erstellt werden. Fügen Sie dem Projekt eine Implementierung von 'IDesignTimeDbContextFactory' hinzu, oder suchen Sie Ссылка nach weiteren Mustern, die zur Entwurfszeit unterstützt werden.
Hier ist mein Code ...
Programm.cs
%Vor%Startup.cs
%Vor%DataContext.cs
%Vor%Manish's Kommentar als Antwort für Formatierungsgründe hinzugefügt:
Ich habe eine Klasse erstellt und IDesignTimeDbContext implementiert und es hat angefangen zu arbeiten
%Vor%BEARBEITEN: jetzt veraltet. Microsoft aktualisierte das Migrationsdokument Ende September zu zeigen, wie Sie aktualisieren, so dass Sie diese Problemumgehung nicht benötigen.
Wie auf diesem Problem, das ich bei github ausgelöst habe , verschieben Sie Ihren DB-Initialisierungscode nach das Programm main, indem es zwischen BuildWebHost () und .Run ()
gesetzt wird Es ist relativ einfach, wenn Sie erst einmal verstanden haben, dass Sie den DB-Kontext verwenden müssen
var context = services.GetRequiredService<MyContext>();
in Main und dann funktioniert alles wie erwartet. (Obwohl ich immer noch denke, DB-Initialisierung ist eine einmalige Initialisierungs-Sache, nicht ein Programm-Programm-Lauf)
Verschieben Sie in 2.0-Projekten den SeedData.Initialize
-Aufruf in die Main
-Methode von Program.cs :
Referenz: Ссылка
Es sieht so aus, als würde EF 2.0 nicht mit "Beispieldaten" arbeiten, die von der alten Netzkernvorlage des Projekts übrig bleiben. Ich habe es geschafft, diesen Fehler loszuwerden, indem ich einfach die nächste Zeile kommentierte:
%Vor%Ich denke
%Vor%Fälle dieser Fehler. Ich bin mir nicht sicher, ob diese Lösung korrekt ist, aber es funktioniert.
Dies steht im Zusammenhang mit dem neuen Init-Prozess von .NET Core 2.0, bei dem die Konfiguration anders gehandhabt wird (Details hier ).
Wenn Sie von 1.x aktualisiert haben, ändern Sie Ihre Program.cs
und Startup.cs
:
Nach dieser Änderung sollten Ihre Migrationen funktionieren und es besteht keine Notwendigkeit für eine Implementierung von IDesignTimeDbContextFactory
.
Ich hatte das gleiche Problem mit dem neuesten .Net Core 2.0.3 . Ich habe ein separates Projekt mit dbContext Implementierung (von meiner benutzerdefinierten Schnittstelle IUnitOfWork ), und zuerst - Migration wurde perfekt gearbeitet. Aber nachdem ich eine andere Infrastruktur implementiert habe, habe ich einen ähnlichen Fehler:
Es konnte kein Objekt vom Typ 'TestCoreUnitOfWork' erstellt werden. Fügen Sie ein ein Implementierung von 'IDesignTimeDbContextFactory' zu das Projekt oder Ссылка für Zusätzliche Muster werden zur Entwurfszeit unterstützt.
Die vorgeschlagene Lösung zur Implementierung IDesignTimeDbContextFactory ist in Ordnung, aber ich habe mich gefragt, warum Migrationen schon einmal funktioniert haben? Ich habe einige Stunden damit verbracht herauszufinden, welche Codeänderung die Migration durchbrach. Und wie sich herausstellte, war es die Initialisierung von Bootstrappern, wo ich alle referenzierten Assemblys aus meiner Lösung geladen habe (über Assembly.Load () ). Nachdem ich dies auf traditionelle Art und Weise mit direktem Aufruf aller Bootstrapper geändert habe, begann die Migration wieder zu funktionieren.
Zum Zusammenfassen und Beantworten der Frage ist der eine mögliche Grund für den Migrationsfehler - Verwenden von Assembly.Load () in StartUp.ConfigureServices () .
Ich hoffe, dass es für jemanden nützlich sein wird.
Tags und Links c# entity-framework-core asp.net-core-2.0