ASP.NET Kern DbContext-Injektion
Ich habe eine ConfigurationDbContext
dass ich versucht bin, zu verwenden. Es hat mehrere Parameter, DbContextOptions
und ConfigurationStoreOptions
.
Wie kann ich diese DbContext, um meine Dienstleistungen in ASP.NET Core?
Habe ich versucht, die folgenden in meinem Systemstart.cs:
ConfigureServices
....
services.AddDbContext<ConfigurationDbContext>(BuildDbContext(connString));
....
private ConfigurationDbContext BuildDbContext(string connString)
{
var builder = new DbContextOptionsBuilder<ConfigurationDbContext>();
builder.UseSqlServer(connString);
var options = builder.Options;
return new ConfigurationDbContext(options, new ConfigurationStoreOptions());
}
- verwenden Sie mssql-server
- ja. Aber, zu konstruieren, die den dbcontext, ich benötigen, um pass ein weiterer parameter.
- außerdem habe ich ein Beispiel-link
Du musst angemeldet sein, um einen Kommentar abzugeben.
AddDbContext
Umsetzung nur registriert Kontext, sich selbst und seine gemeinsame Abhängigkeiten in DI.Statt
AddDbContext
nennen, es ist vollkommen legal, manuell registrieren Ihre DbContext:Darüber hinaus könnte man eine factory-Methode Parameter übergeben (das ist die Beantwortung der Frage):
P. S., Im Allgemeinen, Sie müssen nicht registrieren
DbContextOptionsFactory
- und Standard -DbContextOptions
zu beheben DbContext selbst, aber es könnte in bestimmten Fällen notwendig sein.DbContextPool
ist etwas Hinzugefügt, im Kern 2.0 denke ich.Können Sie diese in den Autostart.cs.
Detail Informationen : https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext
Detail Beispiel : Erste Schritte mit ASP.NET Core-MVC und Entity Framework-Core
Versuchen, diese für Spritzen Sie Ihre ef-Kontext - Kontext der Vererbung von IDbContext
1-Fügen Sie Ihre Kontext-Dienst:
2-Injizieren Sie Ihr Kontext:
In, um sich zu registrieren
DbContext
als service inIServiceCollection
haben Sie zwei Möglichkeiten:(wir gehen davon aus, dass Sie gehen, um eine Verbindung zu einer SQL Server-Datenbank)Mit AddDbContext<>
Mit AddDbContextPool<>
wie Sie vielleicht sehen, sind diese beiden in Bezug auf das schreiben haben ähnlichkeiten, aber in der Tat haben Sie einige grundlegende Unterschiede im Hinblick auf die Konzepte. @GabrielLuci hat eine schöne rezension über die Unterschiede zwischen diesen beiden: https://stackoverflow.com/a/48444206/1666800
Beachten Sie auch, dass Sie können speichern Sie Ihre Verbindungszeichenfolge innerhalb der appsettings.json-Datei und Lesen Sie einfach es mit:
Configuration.GetConnectionString("DefaultConnection")
innerhalb derConfigureServices
Methode inStartup.cs
Datei.Können Sie alle Parameter der db-Kontext in einer Klasse
AppDbContextParams
und registrieren eine Fabrik zu erstellen das Objekt für appdbcontext: