Aucun fournisseur de base de données n'est configuré EF7

asp.net-core asp.net-core-mvc c# entity-framework entity-framework-core

Question

Il semble que je reçois ce message d'erreur lorsque j'utilise Entity Framework 7 et MVC6

System.InvalidOperationException Aucun fournisseur de base de données n'est configuré. Configurez un fournisseur de base de données en remplaçant OnConfiguring dans votre classe DbContext ou dans la méthode AddDbContext lors de la configuration des services.

Je crois que j'ai fait tout ce que je suis censé faire, alors peut-être que c'est un bug. J'utilise la version 7.0.0-beta7 d'Entity Framework.

J'ai configuré mon DbContext, une interface afin que je puisse me moquer de DbContext (nécessaire dans EntityFramework 6 pour les tests unitaires). Mes services prennent l’interface en tant que constructeur et j’ai installé DI dans MVC 6.

Dans mon fichier Startup.cs, j'ai les éléments suivants

public void ConfigureServices(IServiceCollection services)
{
    // entity framework
    services.AddEntityFramework()
        .AddSqlServer()
        .AddDbContext<MyDbContext>(options =>
            options.UseSqlServer(Configuration["Data:MyConnection:ConnectionString"])
        );

    // Add MVC services to the services container.
    services.AddMvc();

    // new context on each request
    services.AddScoped<IMyDbContext, MyDbContext>();
}

J'ai vérifié ma connectionString et cela retourne une connexion valide. J'ai également vérifié dans mon service que l'objet est en cours d'injection, et qu'il n'est pas nul, cela devrait donc fonctionner.

Mon fichier config.json ressemble à ceci

{
    "Data": {
        "MyConnection": {
            "ConnectionString": "Server=(local);Database=XXXX;Trusted_Connection=True;"
        }
    }
}

Mon DbContext ne remplace pas la méthode OnConfiguring, parce que je crois que ce n'est pas nécessaire car je le fais tout comme ci-dessus? Ai-je raison? Qu'est-ce que je rate? Vu de nombreux sites Web, certains utilisent du code ancien, car certaines méthodes n'existent pas et les autres sites ont les mêmes caractéristiques que celles que j'ai.

Réponse acceptée

Configurez votre MyDbContext indiqué ci-dessous pour injecter le paramètre options défini dans l'appel Startup.cs AddDbContext ().

public MyDbContext(DbContextOptions options)
: base(options)
{ }

Cela vous permettra de passer votre chaîne de connexion de la configuration (config.json) dans la méthode options.UseSqlServer ().

services.AddEntityFramework()
    .AddSqlServer()
    .AddDbContext<MyDbContext>(options => options.UseSqlServer(Configuration["Data:MyConnection:ConnectionString"]));

J'ai rencontré le même problème lorsque j'ai dû scinder ma solution en projets distincts Web, BL et DAL.


Réponse populaire

Je crois que vous avez frappé cette erreur sur la ligne où vous essayez d'accéder à certaines données de la base de données. Vous pouvez résoudre ce problème en configurant votre contexte. Remplacez simplement la méthode OnConfiguring.

public class MyDbContext : DbContext
{
    public DbSet<Employee> Employees { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        options.UseSqlServer("<your connection string>");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        ...
    }
}



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi