web-dev-qa-db-fra.com

Injection ASP.NET Core DbContext

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());
}
5
blgrnboy

AddDbContextimplementation 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.

6
Ilya Chumakov

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")));
}
2
hasan

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;
        }
    }
0
hossein sedaghat

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.

0
Vahid Farahmandian