Comment voulez-vous configurer le DbContext lors de la création des Migrations dans le Cadre de l'Entité de Base?
Est-il moyen que l'injection de dépendance peut être configuré/amorcé lors de l'utilisation d'Entity Framework migration des commandes?
Cadre de l'entité de Base prend en charge l'injection de dépendance pour DbContext
sous-classes. Ce mécanisme est ainsi que pour la configuration de l'accès aux données en dehors de la DbContext
.
Par exemple, ce qui suit configurer EF persister à un serveur SQL server à l'aide d'une chaîne de connexion (extrait de config.json
ServiceCollection services = ...
var configuration = new Configuration().AddJsonFile( "config.json" );
services.AddEntityFramework( configuration )
.AddSqlServer()
.AddDbContext<BillingDbContext>( config => config.UseSqlServer() );
Cependant, les migrations commandes ne sais pas pour exécuter ce code afin Add-Migration
échouent par manque d'un fournisseur ou de l'absence d'une chaîne de connexion.
Migrations peuvent être mis en oeuvre par des raisons impérieuses OnConfiguring
dans le DbContext
sous-classe pour spécifier le fournisseur et la configuration de la chaîne, mais qui est dans la manière, lors de la configuration différente est souhaitée ailleurs. En fin de compte garder mon la migration des commandes et mon code à la fois le travail devient fâcheusement complexe.
Note: Mon DbContext
vit dans une autre assemblée que le point d'entrée qui l'utilise et ma solution a plusieurs projets start-up.
- Essayant de se faire est une partie de la question #639. Dans ASP.NET 5, nous allons appeler
Startup.ConfigureServices()
. À votre avis, serait-il bon d'utiliser la même convention pour non-ASP.NET 5 projets? - Maintenant que j'ai fait un peu de développement dans ASP.NET 5 (a l'aide de EF7 traditionnels .NET application) je peux dire que la normalisation de la
Startup
classe sonne bien pour moi. - J'ai poussé pour qu'il en réseau de l'Hébergement/#286, mais il a perdu. La décision a été d'avoir différents DbContext chargeurs pour différents types d'applications. Voir aspnet/EntityFramework#2357.
Vous devez vous connecter pour publier un commentaire.
Comme @bricelam a commenté cette fonctionnalité n'existe pas encore dans l'Entity Framework 7. Cette fonctionnalité manquante est suivi par GitHub question aspnet/EntityFramework#639
Dans le temps de le dire, la plus simple solution de contournement que j'ai trouvé est d'utiliser un état global plutôt que de soucis avec les sous-classement. Habituellement pas mon premier choix de conception, mais il fonctionne bien pour l'instant.
Dans MyDbContext:
Dans
Startup.ConfigureServices()
.(Le code de configuration vit dans un Autofac Module dans mon cas.)
Utilisation IDesignTimeDbContextFactory
Si une classe implémentant cette interface se trouve dans le même projet que le dérivé
DbContext
ou dans la demande de démarrage du projet, les outils de contournement de la d'autres façons de créer de laDbContext
et l'utilisation de la conception de l'usine à la place.appliquée dans l'Entity Framework 2.0, 2.1
À l'aide de
IDbContextFactory<TContext>
est maintenant obsolète.d'Implémenter cette interface pour activer des services de conception pour des types de contexte qui n'ont pas de constructeur par défaut public. Des services de conception permettra de découvrir automatiquement les implémentations de cette interface qui sont dans la même assemblée que les dérivés contexte.plus d'infos : https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext
Si vous n'êtes pas heureux avec les codée en dur à la connexion de la chaîne, prendre un coup d'oeil à cette article.
De combiner les réponses ci-dessus, cela fonctionne pour moi
Dans .NET de Base depuis la version 2.1 doit être utilisé
IDesignTimeDbContextFactory
parce queIDbContextFactory
est obsolète.Je sais que c'est une vieille question, mais je utiliser le onConfiguring méthode et je n'ai pas ce problème
Startup
classe de mon application utilise ne peut pas être référencée dans leDbContext
sous-classe parce qu'ils vivent dans les différentes assemblées. Faire cette configuration ici et dansStartup
n'est pas compatible.Je viens de demander à une instance et d'exécuter les migrations dans mon Démarrage.cs fichier
Puis à Configurer:
Remarque: Il n'existe pas de EnsureCreated' pour la base de données. Migrer est censé créer si elle n'existe pas, bien que la façon dont il est censé comprendre les autorisations, je ne sais pas - j'ai donc créé une base de données vide.
DbContext
avec configuration personnalisée dans leOnConfiguring
méthode, et je veux qu'il ne génère de multiples bases de données, j'ai donc besoin d'appelercontext.Database.Migrate
post contexte de configuration. Où est le bon endroit pour le faire?