데이터베이스 공급자가 구성되어 있지 않습니다. EF7

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

문제

Entity Framework 7 및 MVC6을 사용할 때이 오류 메시지가 나타나는 것 같습니다.

System.InvalidOperationException 데이터베이스 공급자가 구성되어 있지 않습니다. DbContext 클래스의 OnConfiguring 또는 서비스 설정시 AddDbContext 메서드를 재정 의하여 데이터베이스 공급자를 구성합니다.

나는 내가하고있는 모든 일을 다했다고 믿는다. 아마도 그 벌레 일 것이다. Entity Framework 버전 7.0.0-beta7을 사용하고 있습니다.

나는 DbContext를 조롱 할 수있는 인터페이스 인 DbContext를 설치했다. (EntityFramework 6에서 유닛 테스트에 필요했다.) 내 서비스는 생성자로 인터페이스를 사용하며 MVC 6에 설치 DI가 있습니다.

내 Startup.cs 파일에서 나는 다음과 같은 것을 가지고있다.

public void ConfigureServices(IServiceCollection services)
{
    // entity framework
    services.AddEntityFramework()
        .AddSqlServer()
        .AddDbContext<MyDbContext>(options =>
            options.UseSqlServer(Configuration["Data:MyConnection:ConnectionString"])
        );

    // Add MVC services to the services container.
    services.AddMvc();

    // new context on each request
    services.AddScoped<IMyDbContext, MyDbContext>();
}

내 connectionString 확인하고 유효한 연결을 반환하고 있습니다. 나는 또한 내 서비스에서 객체가 주입되고 있는지 검사했고 null이 아니므로 모든 것이 작동해야합니다.

내 config.json 파일은 다음과 같습니다.

public void ConfigureServices(IServiceCollection services)
{
    // entity framework
    services.AddEntityFramework()
        .AddSqlServer()
        .AddDbContext<MyDbContext>(options =>
            options.UseSqlServer(Configuration["Data:MyConnection:ConnectionString"])
        );

    // Add MVC services to the services container.
    services.AddMvc();

    // new context on each request
    services.AddScoped<IMyDbContext, MyDbContext>();
}

내 DbContext는 OnConfiguring 메서드를 재정의하지 않습니다. 위와 같이 모든 작업을 수행 할 때 필요하지 않기 때문입니다. 내가 맞습니까? 나는 무엇을 놓치고 있습니까? 다른 웹 사이트를 많이 보았습니다. 일부 코드는 존재하지 않으며 다른 웹 사이트는 동일한 코드를 가지고 있기 때문에 일부는 오래된 코드를 사용하고있는 것 같습니다.

수락 된 답변

Startup.cs AddDbContext () 호출에 정의 된 options 매개 변수를 주입하려면 아래 표시된 MyDbContext를 설정하십시오.

public MyDbContext(DbContextOptions options)
: base(options)
{ }

이렇게하면 Configuration (config.json)에서 메소드 호출 옵션으로 연결 문자열을 전달할 수 있습니다 .UseSqlServer ()

public MyDbContext(DbContextOptions options)
: base(options)
{ }

내 솔루션을 별도의 프로젝트 Web, BL 및 DAL로 분할해야 할 때 동일한 문제가 발생했습니다.


인기 답변

나는 당신이 당신이 데이터베이스에서 어떤 데이터에 접근하려는 라인에서이 에러를 쳤다고 믿는다. 컨텍스트를 구성하여이 문제를 해결할 수 있습니다. OnConfiguring 메서드를 재정의하십시오.

public class MyDbContext : DbContext
{
    public DbSet<Employee> Employees { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        options.UseSqlServer("<your connection string>");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        ...
    }
}



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.