L'ajout de DbContextOptions en Démarrage.cs ne pas enregistrer un magasin de données
Mon problème est que le code ci-dessous ne s'inscrit pas à une banque de données lors du démarrage. Il s'agit de la "erreur" déclaration-je obtenir 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(IServiceCollection services), je suis en train 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 de l'option de base, code:
public MyContext(DbContextOptions options) : base(options) { }
Mon fichier de configuration config.json, qui est lu au démarrage, contient cette connectionstring:
"Data": {
"DefaultConnection": {
"ConnectionString": "Server=(localdb)\\MSSQLLocalDB;Database=MyDbName;Trusted_Connection=True;MultipleActiveResultSets=True;"
}
}
Je l'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 la banque de données et fonctionne correctement, mais je préfère utiliser le lambda moyen.
Si il n'y a aucun besoin de plus d'information, je vais fournir.
Ouais, je suis sur la bêta 3 pour le moment, mais je suppose que je dois juste attendre jusqu'à ce qu'ils le réparer, juste pensé que c'était étrange que EF 7 sur github a le lambda moyen comme un exemple sur la façon de définir DbContextOptions. Merci en passant, bon de savoir que je ne suis pas seul dans cette affaire.
OriginalL'auteur DanielRJ | 2015-04-29
Vous devez vous connecter pour publier un commentaire.
Êtes-vous injecter votre contexte dans votre contrôleur ou de l'endroit où vous l'utilisez? J'ai découvert que si vous essayez à nouveau le contexte au lieu de l'injecter, ne pas utiliser la configuration spécifiée dans le Démarrage.cs
Bizarre... c'est mon contexte sur la beta4, et il fonctionne très bons services.AddEntityFramework() .AddSqlServer() .AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration["Données:DefaultConnection:ConnectionString"]));
Merci pour le partage, je vais l'essayer demain. Aussi, je vais à la mise à niveau vers la beta4, si ça ne va pas être une corvée. Commencé avec la beta2, et la mise à niveau a été douloureux entre 2 et 3. Les Migrations et la classe de renommage dans Microsoft.MVC, pas de plaisir. Je vais vous laisser savoir comment ça s'est passé demain.
Les Migrations à partir de 3->4 a été assez méchant ainsi
J'ai essayé votre code d'exemple dans beta3, ne fonctionne pas avec mon projet, toujours le même message d'erreur. Dans la configuration.json, le nom est le même que le vôtre. J'ai décidé d'aller pour une classe statique qui lit le fichier de configuration au démarrage, et quand mon DbContexts besoins d'informations, ils vont demander à la classe statique. J'ai un projet de la structure où j'ai séparé la dbcontext dans son propre projet avec mes dépôts. Merci bien! Je ne vais pas migrer vers la beta4 puis, de projet, de demain, oui.
OriginalL'auteur Slick86
J'ai (encore) eu le même problème avec EF7 et bêta 4. C'est ma solution de contournement dans mon contexte de données:
J'ai extrait de la connectionstring de ces options et de l'utiliser dans l'OnConfiguring méthode. Ce n'est pas encore la solution que nous voulons, mais je n'ai pas à changer quelque chose dans le Démarrage.cs (tout y est, comme vous l'avez décrit). Et dès que ce n'est fixé, il vous suffit de retirer la substance à partir de la classe de contexte de données.
Et peut-être que quelqu'un a une autre (et même mieux) la solution à ce problème.
OriginalL'auteur Jan-Patrick Ahnen
OriginalL'auteur Techbrainhub Services
EF7 a nouveau sytax de DBContextOptionsBuilder à EntityOptionsBuilder. La suite est prête à l'emploi pour aussi ligne de commande de l'échafaudage.
OriginalL'auteur Mehdi