Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Реляционное хранилище настроено без указания DbConnection или строки подключения для использования.

Автор вопроса: CommunityОтветов: 5

Я использую asp.net vnext и ef7, когда хочу добавить пользователя, я получаю эту ошибку:

Реляционное хранилище настроено без указания используемого DbConnection или строки подключения.

Что это?

Рассмотрим запуск моего приложения:

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"});
                });
        }
    }
}

и это мой config.json:

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

}

entity-frameworkentity-framework-core

Ответы

Ответ 1 · рейтинг 3 · kowsheek

Я думаю, проблема заключалась в том, что имя вашего класса DbContext не совпадает с именем, указанным в вашей конфигурации.

Например, если у вас есть DbContext с именем MembershipDbContext, вы можете указать строку подключения, которую он должен использовать, через свойства внутри EntityFramework.

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

Это чище, чем указание ключей строки подключения в коде.

В вашем случае имя DbContext - ApplicationContext, а имя, указанное вами в конфигурации, - ApplicationDbContext, которые не совпадают.

Ответ 2 · рейтинг 4 · Huson

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

Изменение ConnectionStringKey на ConnectionString работает для меня.

Ответ 3 · рейтинг 3 · agua from mars

Я предпочитаю настраивать хранилище в классе Setup:

public virtual void ConfigureServices(IServiceCollection services)
{
    services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<ApplicationContext>(options => options.UseSqlServer(
                Configuration.Get("Data:DefaultConnection:ConnectionString")));
     services.AddDefaultIdentity<ApplicationContext, ApplicationUser, IdentityRole>(Configuration);
     services.AddMvc();
}

Ответ 4 · рейтинг 1 · Community

Я получаю это и добавляю этот код в свой контекст:

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

Ответ 5 · рейтинг 1 · Fred

Он ищет строку подключения в DbContext, поэтому вам нужно изменить "ConnectionStringKey" на "ConnectionString" в config.json.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы