J'ai un ConfigurationDbContext
que j'essaie d'utiliser. Il a plusieurs paramètres, DbContextOptions
et ConfigurationStoreOptions
.
Comment puis-je ajouter ce DbContext à mes services dans ASP.NET Core?
J'ai essayé ce qui suit dans mon Startup.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());
}
AddDbContext
implementation enregistre simplement le contexte lui-même et ses dépendances communes dans DI. Au lieu d’un appel AddDbContext
, il est parfaitement légal d’enregistrer manuellement votre DbContext:
services.AddTransient<FooContext>();
De plus, vous pouvez utiliser une méthode fabrique pour passer des paramètres (ceci répond à la question):
services.AddTransient<FooContext>(provider =>
{
//resolve another classes from DI
var anyOtherClass = provider.GetService<AnyOtherClass>();
//pass any parameters
return new FooContext(foo, bar);
});
P.S., En général, vous n'avez pas besoin d'enregistrer DbContextOptionsFactory
et par défaut DbContextOptions
pour résoudre DbContext lui-même, mais cela peut être nécessaire dans certains cas.
Vous pouvez l'utiliser dans startup.cs.
Informations détaillées: https://docs.Microsoft.com/en-us/ef/core/misc Miscellaneous/configuring-dbcontext
Exemple de détail: Mise en route avec ASP.NET Core MVC et Entity Framework Core
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>options.
UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
Essayez ceci pour injecter votre contexte ef - héritage de contexte de IDbContext
1-Ajoutez votre contexte au service:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<NopaDbContext>(
options => options
.UseLazyLoadingProxies()
.UseSqlServer(Configuration.GetConnectionString("NopaDbContext")),ServiceLifetime.Scoped);}
2-Injectez votre contexte:
private readonly IDbContext _context;
public EfRepository(NopaDbContext context)
{
this._context = context;
}
protected virtual DbSet<TEntity> Entities
{
get
{
if (_entities == null)
_entities = _context.Set<TEntity>();
return _entities;
}
}
Pour enregistrer DbContext
en tant que service dans IServiceCollection
, vous avez deux options: (nous supposons que vous allez vous connecter à une base de données SQL Server)
Utilisation de AddDbContext <>
services.AddDbContext<YourDbContext>(o=>o.UseSqlServer(Your Connection String));
Utilisation de AddDbContextPool <>
services.AddDbContextPool<YourDbContext>(o=>o.UseSqlServer(Your Connection String));
comme vous pouvez le constater, ces deux concepts présentent des similitudes en termes d'écriture, mais ils présentent en réalité des différences fondamentales en termes de concepts. @GabrielLuci a une réponse intéressante sur les différences entre ces deux: https://stackoverflow.com/a/48444206/1666800
Notez également que vous pouvez stocker votre chaîne de connexion dans le fichier appsettings.json et la lire simplement à l’aide de: Configuration.GetConnectionString("DefaultConnection")
dans la méthode ConfigureServices
dans le fichier Startup.cs
.