Entity Framework 7 마이그레이션이 다른 프로젝트로 이동 될 때 데이터베이스 공급자가 구성되지 않음 =>

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

문제

나는 EF7을 처음 사용합니다. 나는 이것이 중복 질문이라는 것을 알고있다.

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

하지만이 질문을하기 전에 기다려라.

 services.AddEntityFramework()
         .AddSqlServer()
         .AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));

 services.AddIdentity<ApplicationUser, IdentityRole>()
         .AddEntityFrameworkStores<ApplicationDbContext>()
         .AddDefaultTokenProviders();

  services.AddScoped<TestRepository, TestRepository>();

이제 EF 프로젝트의 cmd 창에서 dnx ef 데이터베이스 업데이트 명령을 실행하고이 오류가 발생합니다.

 services.AddEntityFramework()
         .AddSqlServer()
         .AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));

 services.AddIdentity<ApplicationUser, IdentityRole>()
         .AddEntityFrameworkStores<ApplicationDbContext>()
         .AddDefaultTokenProviders();

  services.AddScoped<TestRepository, TestRepository>();

이제 상단에 붙여 넣은 솔루션 링크에 따라 내 ApplicationDbContext 의 생성자를 변경하려고 시도했습니다.

그게 전부 내 코드 :

내 ApplicationDbContext.cs는 실제로 비어있어서 아무것도 재정의하지 않았 음을 의미합니다.

기본 클래스의 기본 클래스를 살펴보면 매개 변수 DbContextOptions가있는 오버로드 된 생성자가 있지만 내 생성자에서 아무 것도 전달할 수 없습니까?!

 services.AddEntityFramework()
         .AddSqlServer()
         .AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));

 services.AddIdentity<ApplicationUser, IdentityRole>()
         .AddEntityFrameworkStores<ApplicationDbContext>()
         .AddDefaultTokenProviders();

  services.AddScoped<TestRepository, TestRepository>();

내 편이 무너 지니? 나는 EF 7 RC1과 dnx 451을 사용하고있다.

이는 ApplicationDbContext / ApplicationUser 및 Migrations 폴더 전체를 추가로 이동하여 "DataAccess"프로젝트라고 할 때만 발생합니다. 그러면 모든 것이 망가져 버린 것 같습니다.

수락 된 답변

  1. 웹 응용 프로그램 템플릿 (인증 : 개별 사용자 계정)을 사용하여 "WebProject"라는 새 ASP.NET 웹 응용 프로그램을 만듭니다.

  2. 이제 "DataAccess"라는 솔루션에 다른 프로젝트를 추가하십시오 (관련없는 클래스 라이브러리 유형이라고합시다)

  3. 이제 ApplicationDbContext / ApplicationUser 파일 및 마이그레이션 폴더를 DataAccess 프로젝트로 이동합니다.

  4. 이 단계에서 빌드가 실패 할 것이므로 올바른 참조를 위해 project.json을 수정해야합니다.

  5. DataAccess 프로젝트의 경우 다음 종속성을 추가하십시오.

    "dependencies": {
        "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final",
        "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final"
    }
    
  6. WebProject의 경우 DataAccess 를 종속성으로 추가하십시오. DataAccess 는 위의 2 가지 패키지를 참조하므로 WebProject에서 해당 참조를 제거 할 수 있습니다.
    이제 빌드가 성공하고 웹 애플리케이션을 시작할 수 있습니다.

ef 마이그레이션 사용 방법 :

명령 줄에서 DataAccess 프로젝트가 아닌 WebProject의 디렉토리로 이동하십시오. 모든 ef 명령은 여기에서 잘 작동합니다.

DataAccess 프로젝트의 Migrations 폴더에 새 마이그레이션을 추가하려면 -p 플래그를 사용해야합니다. 처럼,
dnx ef migrations add Sample -p DataAccess 합니다.

명령은 DataAccess 프로젝트 내의 cmd에서 실행되기 때문에 문제가 발생합니다. 모든 서비스를 초기화하는 시작 클래스가 WebProject에 있습니다. DataAccess 디렉토리에서 명령을 실행하려고하면 EntityFramework.Commands 가 참조되기 때문에 dnx ef 가 인식되지만 마이그레이션을 사용하려고하면 서비스가 초기화되지 않으므로 위 예외를 throw하지 못합니다.


인기 답변

Context 클래스를 "DataAccess"프로젝트로 옮기고 "DataAccess"프로젝트에서 컨텍스트의 OnConfiguring 메서드를 재정의 한 다음 마이그레이션을 실행하십시오.

public partial class MyContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        options.UseSqlServer(@"Server=****;Database=***;user id=***;password=***");
    }
}

또는 연결 문자열을 하드 코딩하지 않으려면 다음과 같이 할 수 있습니다. DI가 당신에게 옵션을 주입 할 것입니다;

public partial class MyContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        options.UseSqlServer(@"Server=****;Database=***;user id=***;password=***");
    }
}

그리고 Startup.cs에서;

public partial class MyContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        options.UseSqlServer(@"Server=****;Database=***;user id=***;password=***");
    }
}

및 appsetting.json;

public partial class MyContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        options.UseSqlServer(@"Server=****;Database=***;user id=***;password=***");
    }
}



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