So fügen Sie dem Projekt in asp.net-core-2.0 eine Implementierung von 'IDesignTimeDbContextFactoryDataContext' hinzu

8

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 26.08.2017, 05:45
quelle

8 Antworten

9

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)

    
gbjbaanb 27.08.2017 13:07
quelle
1

Verschieben Sie in 2.0-Projekten den SeedData.Initialize -Aufruf in die Main -Methode von Program.cs :

%Vor%

Referenz: Ссылка

    
Kristoffer Jälén 05.10.2017 12:47
quelle
1

Änderte einfach mein Program.cs

von diesem

%Vor%

zu diesem

%Vor%

Quelle: Ссылка

    
Srinivas M. P. 09.11.2017 11:07
quelle
0

Das Problem ist mit dem Seeding db von Startup.Configure ... Sie können es immer noch mit dieser Arbeit umgehen. Getestet und gut gearbeitet

Ссылка

    
Nick G. 09.09.2017 17:55
quelle
0

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.

    
sibvic 19.09.2017 14:41
quelle
0

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 :

%Vor%

Nach dieser Änderung sollten Ihre Migrationen funktionieren und es besteht keine Notwendigkeit für eine Implementierung von IDesignTimeDbContextFactory .

    
Tobias Punke 22.09.2017 14:44
quelle
0

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.

    
Pavel K. 29.11.2017 08:39
quelle
0

Ich bin bei der Verwendung von Npgsql.EntityFrameworkCore.PostgreSQL auf diesen Fehler gestoßen, wenn es darauf ankommt.

Berücksichtigung Ссылка

Ich habe das zu BuildWebHost ()

hinzugefügt %Vor%

so ist es bacame:

%Vor%

Jetzt funktioniert es

    
mkb 14.03.2018 23:03
quelle