Ajout de DbContextOptions dans Startup.cs sans enregistrer le magasin de données

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

Question

Mon problème est que le code ci-dessous n'enregistre pas de magasin de données au démarrage. Voici la déclaration "d'erreur" que je reçois dans la réponse de l'application:

An unhandled exception occurred while processing the request.

InvalidOperationException: No data stores are configured. Configure a data store by overriding OnConfiguring in your DbContext class or in the AddDbContext method when setting up services.
    Microsoft.Data.Entity.Storage.DataStoreSelector.SelectDataStore(ServiceProviderSource providerSource)

Dans ConfigureServices (services IServiceCollection), j'essaie de spécifier DbContextOptions pour mon DbContext dans un lambda. Code:

services.AddEntityFramework(Configuration)
    .AddSqlServer()
    .AddDbContext<MyDbContext>(
        options =>
        options.UseSqlServer(Configuration.Get("Data:DefaultConnection:ConnectionString"))
    );

Dans mon DbContext, j'ai un constructeur qui envoie l'option à la base, code:

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

Mon fichier de configuration config.json, qui est lu au démarrage, contient cette chaîne de connexion:

"Data": {
    "DefaultConnection": {
        "ConnectionString": "Server=(localdb)\\MSSQLLocalDB;Database=MyDbName;Trusted_Connection=True;MultipleActiveResultSets=True;"
    }
}

J'ai déjà utilisé

protected override void OnConfiguring(DbContextOptions options)
{
    options.UseSqlServer(Startup.Configuration.Get("Data:DefaultConnection:ConnectionString"));

}

dans mon DbContext avec succès. Il enregistre le magasin de données et cela fonctionne correctement, mais je préférerais utiliser la méthode lambda.

Si d'autres informations sont nécessaires, je les fournirai.

Réponse populaire

Etes-vous en train d'injecter votre contexte dans votre contrôleur ou où que vous l'utilisiez? J'ai découvert que si vous essayez de créer le contexte au lieu de l'injecter, il n'utilise pas la configuration spécifiée dans Startup.cs.




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