2

를 사용하는 DbConnection 또는 연결 문자열 중 하나를 지정하지 않고 구성되었습니다?관계형 상점은 내가 asp.net의 vnext 및 ef7를 사용하여

내 응용 프로그램을 시작 고려해

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입니다 :

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

답변

4

문제는 DbContext 클래스 이름이 설정에 지정된 이름과 같지 않은 것 같습니다.

예를 들어 MembershipDbContext이라는 DbContext가있는 경우 EntityFramework 안에있는 속성을 통해 사용할 연결 문자열을 지정할 수 있습니다.

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

이것은 코드 내에서 연결 문자열 키를 지정하는 것보다 깔끔합니다.

귀하의 경우 DbContext 이름은 ApplicationContext이며 구성에 지정한 이름은 일치하지 않는 ApplicationDbContext입니다.

+0

이것은 있습니다. 순수한 천재, 나는 심지어 컨텍스트와 일치하는 이름을 알아 차리지 못했고, 다른 dll로 컨텍스트를 옮기고 이름을 변경했기 때문에 이것은 누락 된 링크였습니다. 고맙습니다. – Vassi

1

설치 클래스에서 저장소를 구성하는 것이 좋습니다.

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(); 
} 
+3

이것은 의미가 없습니다. 컨텍스트 클래스에있는 경우 Startup은 정적 클래스가 아닙니다. –

+0

Shawn과 같은 문제가 생겼습니다. 정적 클래스가 아닙니다. –

+0

깨끗한 해결책을 얻었습니까? 솔루션의 별도 프로젝트에 DbContext를 추가하는 동안 동일한 문제가 발생합니다. – Oli

3

I : 나는 그것을 얻을 내 상황에서이 코드를 추가

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

} 
+0

이 파일은 config.json 파일에 정의되어 있으므로 변경하지 않아야합니까? –

+0

Startup 클래스의 구성을 그대로두고이 메서드를 사용하는 것이 좋지만 "ASP.NET Core 5.0"에서는 사용할 수 없다는 오류 메시지가 나타납니다. (응용 프로그램은 정상적으로 작동하지만 스카 폴딩은 "사용할 DbConnection 또는 연결 문자열을 지정하지 않았습니다"에 대해 내게 짖고 있습니다.) –

2

DbContext에서 연결 문자열을 찾고 있으므로 config.json에서 "ConnectionString"을 "ConnectionString"으로 변경해야합니다.

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

ConnectionStringKey을 변경하면 나를 위해 ConnectionString 작동합니다.