테이블을 만들지 않는 Entity Framework 7 마이그레이션

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

문제

Entity Framework 7을 사용하여 첫 번째 프로젝트를 진행하면서 데이터베이스가 이미 생성되었지만 아직 테이블이없는 SQL Server에 연결하고 있습니다. 내 DbContext 를 만들고 클래스를 만든 다음 내 컨텍스트에서 DbSet<> 을 설정합니다. 마이그레이션을 활성화하고 첫 번째 마이그레이션을 만든 다음 데이터베이스를 업데이트하는 명령을 실행하는 명령을 실행했습니다. 모든 것이 잘 작동하도록 보였지만 오류는 발생하지 않았지만 데이터베이스를 보면 EFMigraitonsHistory 테이블 만 생성되었습니다. 초기 마이그레이션을 위해 생성 된 클래스를 보면 기본적으로 비어 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

실행중인 명령 :

dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update

문맥:

dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update

표 클래스 :

dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update

Startup.cs :

dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update

초기 마이그레이션 클래스 (EF에서 자동 생성) :

dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update

편집 : Poke가 내 새로운 자동 생성 마이그레이션이라고 제안한 것을 수행 한 후. 테이블은 여전히 ​​데이터베이스 레벨에서 생성되지 않습니다.

dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update

수락 된 답변

먼저 데이터베이스 컨텍스트에서 엔티티를 설정해야합니다. 적어도 다음을 수행해야합니다.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<NavigationMenu>();
}

마이그레이션의 문제점은 프로젝트 레이아웃에서 약간 숨겨졌습니다. 그래서 당신은 엔티티와 데이터베이스 컨텍스트를 포함하는 JobSight.DAL 프로젝트를 가지고 있습니다. 그런 다음 데이터베이스 설정과 함께 Startup.cs 를 포함하는 실제 ASP 프로젝트 인 JobSight.WebUI 프로젝트가 있습니다.

이것은 기본적으로 EF가 현재 어셈블리에서 모든 것을 찾는 것으로 가정하기 때문에 문제를 일으키는 것입니다. 따라서 웹 프로젝트에서 ef 명령을 실행하는 경우 컨텍스트가 다른 프로젝트에 있더라도 마이그레이션이 만들어집니다. 그러나 마이그레이션을 적용하려고 할 때, EF는 컨텍스트의 프로젝트에서만 볼 것이므로 마이그레이션을 찾지 않습니다.

따라서이 문제를 해결하려면 DAL 프로젝트에서 마이그레이션을 만들어야합니다. ef 명령을 호출 할 때 프로젝트를 지정하면됩니다.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<NavigationMenu>();
}

나중에 dnx ef migrations list 을 실행하여 이것이 작동하는지 확인할 수 있습니다. 이제 Example 이주가 리턴됩니다. 이전에는 명령에서 아무것도 반환하지 않았습니다. update 명령에서 Done (마이그레이션을 적용하지 않고)이라고 말하고 데이터베이스를 만들지 않은 이유는 마이그레이션을 찾을 수 없었습니다. 따라서 이제 마이그레이션을 수행하면 다음을 사용하여 마이그레이션 할 수 있습니다.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<NavigationMenu>();
}

마이그레이션이 이제 DAL 프로젝트에서 생성되었으므로 EntityFramework.MicrosoftSqlServer 에 대한 참조를 추가해야합니다. 그렇지 않으면 프로젝트가 컴파일되지 않습니다. 위의 list 명령을 실행하기 전에 그렇게해야합니다.

마지막 으로이 문제 에 대한 자세한 내용은 이 문제를 참조하십시오.


인기 답변

이것이 원래의 질문에 대한 대답은 아니지만 유사한 문제가있는 사람을 도울 수 있기 때문에 여기에 답을 게시합니다. 내 문제는 테이블이 만들어지지 않았지만 dotnet ef migrations add InitialCreate 하여 Migrations 폴더에 3 개의 .cs 파일을 만들었다는 것입니다. 그러나 dotnet ef database update 는 MigrationsHistory 테이블 만 생성하고 dotnet ef migrations list 은 마이그레이션을 반환하지 않았습니다.

문제는 Migrations 폴더가 Visual Studio 프로젝트에서 제외된다는 것입니다. 일단 다시 포함 시키면 모든 것이 잘 작동했습니다.




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