ASP.NET Core 2 + Bekommen Instanz der db-Kontext
Ich versuche zu bekommen eine Instanz der DbContext (also ich kann einige zusätzliche Arbeit, die beim Start mit es), bekomme ich die folgende Fehlermeldung beim Versuch, eine Instanz in der Configure Methode:
System.InvalidOperationException: 'Nicht auflösen kann Gültigkeitsbereich service" Anwendung.Daten.MyDbContext' von der Wurzel-Anbieter.'
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyDbContext>(
options => options.UseSqlServer(Configuration.GetConnectionString("MyDbContext")));
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
var dbContext = app.ApplicationServices.GetService(typeof(MyDbContext)) as MyDbContext;
}
Kann ich den Zugriff auf eine Instanz der DbContext fein über den controller, etc
- Sie können hinzufügen von Abhängigkeiten, um die Configure-Methode, und Sie erhalten automatisch aufgelöst. Versuchen Sie, ändern der Signatur public void Konfigurieren(IApplicationBuilder app, IHostingEnvironment env, MyDbContext dbContext)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Paul Hiles Kommentar richtig ist aber, dass die Methode besser funktioniert .NET-Core-1.0.
In ASP.NET Core 2.0 ist es allgemein eine schlechte Idee, um jede Datenbank-setup in
Startup.cs
. Dies ist, weil, wenn Sie laufen alle Migrationen aus dem CLI oder Visual Studio wird es laufen alleStartup.cs
und versuchen Sie zur Ausführung Ihrer Konfiguration, die scheitern wird. Natürlich, wenn Sie Sie nicht verwenden, Entity-Framework, dann ist dies kein problem, jedoch noch nicht der empfohlene Weg, es zu tun in 2.0. Es ist nun empfohlen, es zu tun inProgram.cs
.Beispielsweise können Sie erstellen eine Erweiterung Methode der
IWebHost
ausgeführt wird, das setup, die Sie benötigen.Und dann in
Program.cs
Sie können dann aufrufen, die Methode vor der Ausführung.- Update für Core 2.1 ff.
Nur um @Travis Boatman's ausgezeichnete Antwort, die bevorzugt
Main
- Methode syntax hat leicht verändert aus Core 2.1 ab und die Standard -Main
Methode hat nunCreateWebHostBuilder
stattBuildWebHost
.Der überarbeitete code, um die Erweiterung die Methode ist unten dargestellt.
NB: die Reihenfolge ist hier wichtig, die
Build
Methode gibt eineWebHost
- das, was der extension-Methode ist die Erweiterung, so müssen Sie rufen Sie die Migration-Methode nachBuild()
und vorRun()
):Die Migration von mehr als einem DbContext
Wir haben mehr als eine
DbContext
in unserem Projekt, also habe ich die extension-Methode eine generische Methode, kann jede Art vonDbContext
:Können Sie dann die Kette der Aufrufe zu migrieren, die für die verschiedenen Kontexte: