Un magasin relationnel a été configuré sans spécifier le type de connexion ou la chaîne de connexion à utiliser.

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

Question

J'utilise asp.net vnext et ef7 quand je veux ajouter un utilisateur qui obtient cette erreur:

Un magasin relationnel a été configuré sans spécifier ni la chaîne de connexion ni la chaîne de connexion à utiliser.

Qu'est-ce que c'est?

Considérez mon début d'application:

using DomainModels;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Routing;
using Microsoft.Framework.ConfigurationModel;
using Microsoft.Framework.DependencyInjection;
using Presentation.DataAccessLayer.Context;
using Microsoft.AspNet.Identity;
namespace Presentation
{
    public class Startup
    {
        public Startup(IHostingEnvironment env)
        {
            Configuration = new Configuration()
                .AddJsonFile("config.json")
                .AddEnvironmentVariables();
        }

        public IConfiguration Configuration { get; set; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddEntityFramework().AddSqlServer().AddDbContext<ApplicationContext>();
            services.AddDefaultIdentity<ApplicationContext, ApplicationUser, IdentityRole>(Configuration);
            services.AddMvc();
        }

        public void Configure(IApplicationBuilder app)
        {
            app.UseStaticFiles();
            app.UseIdentity();
            app.UseMvc(
                routes =>
                {
                    routes.MapRoute("default", "{controller}/{action}/{id?}",
                        new {controller = "Home", action = "Index"});
                });
        }
    }
}

et voici mon config.json:

{
    "Data": {
        "DefaultConnection": {
            "Connectionstring": "Data Source=.\\sqlexpress;Initial Catalog=CraftCenter;Integrated Security=True;"
        }
    },
    "EntityFramework": {
        "ApplicationDbContext": {
            "ConnectionStringKey": "Data:DefaultConnection:ConnectionString"
        }
    }

}

Réponse acceptée

Je pense que le problème était que votre nom de classe DbContext n'est pas le même que le nom spécifié dans votre config.

Par exemple, si vous avez un DbContext appelé MembershipDbContext vous pouvez spécifier la chaîne de connexion à utiliser via les propriétés de EntityFramework .

{
"Data": {
    "Membership": {
        "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Membership;Trusted_Connection=True;MultipleActiveResultSets=true"
    }
},
"EntityFramework": {
    "MembershipDbContext": {
        "ConnectionStringKey": "Data:Membership:ConnectionString"
    }
}

Cela est plus propre que de spécifier les clés de chaîne de connexion dans le code.

Dans votre cas, le nom DbContext est ApplicationContext et le nom que vous avez spécifié dans la configuration est ApplicationDbContext qui ne correspond pas.


Réponse populaire

"EntityFramework": {
    "MembershipDbContext": {
        "ConnectionStringKey": "Data:Membership:ConnectionString"
    }
}

Changer ConnectionStringKey pour que ConnectionString fonctionne pour moi.



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