ASP.NET Core 2 + créer une instance de la db contexte
Je suis en train d'essayer d'obtenir une instance de la DbContext (afin que je puisse faire un peu plus de travail au démarrage avec elle), j'obtiens l'erreur suivante lorsque vous essayez d'obtenir une instance de la configuration de la méthode:
Système.InvalidOperationException: "Impossible de résoudre l'étendue du service 'MyApp.Les données.MyDbContext' partir de la racine du fournisseur.'
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyDbContext>(
options => options.UseSqlServer(Configuration.GetConnectionString("MyDbContext")));
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
var dbContext = app.ApplicationServices.GetService(typeof(MyDbContext)) as MyDbContext;
}
Je peux accéder à une instance de la DbContext amende par le contrôleur, etc
- Vous pouvez ajouter des dépendances à la méthode Configure (et ils le seront automatiquement résolu. Essayez de changer de signature à public void Configurer(IApplicationBuilder application, IHostingEnvironment env, MyDbContext dbContext)
Vous devez vous connecter pour publier un commentaire.
Paul Hiles commentaire est correct mais que la méthode fonctionne mieux dans les .NET Core 1.0.
Dans ASP.NET Core 2.0 c'est généralement une mauvaise idée de lancer une base de données de configuration dans
Startup.cs
. C'est parce que si vous exécutez l'un des migrations à partir de la CLI ou de Visual Studio, il va exécuter toutesStartup.cs
et essayez d'exécuter votre configuration qui va échouer. Bien sûr, si vous n'utilisez pas l'Entité Cadre puis ce n'est pas un problème-mais ce n'est pas recommandé de le faire dans la version 2.0. Il est maintenant recommandé de le faire dansProgram.cs
.Par exemple, vous pouvez créer une méthode d'extension de
IWebHost
qui va exécuter n'importe quel programme d'installation dont vous avez besoin.Puis dans
Program.cs
vous pouvez ensuite appeler cette méthode avant de l'exécuter.Mise à jour pour le Noyau 2.1 à partir de
Juste pour ajouter à @Travis Batelier's réponse excellent, le préféré
Main
méthode de syntaxe a changé légèrement de Base 2.1 à partir de et la valeur par défautMain
méthode a maintenantCreateWebHostBuilder
au lieu deBuildWebHost
.La version révisée du code d'appel de la méthode d'extension est indiqué ci-dessous.
NB: l'ordre est important, ici, la
Build
méthode retourne unWebHost
, qui est ce que la méthode d'extension est d'étendre, de sorte que vous devez appeler le migrer méthode aprèsBuild()
et avantRun()
):La migration de plusieurs DbContext
Nous avons plus d'un
DbContext
dans notre projet, alors j'ai changé l'extension de la méthode à une méthode générique qui peut prendre n'importe quel type deDbContext
:Vous pouvez ensuite enchaîner les appels à migrer les différents contextes: