Development Tip

코드 우선 마이그레이션을 비활성화하려면 어떻게해야합니까?

yourdevel 2020. 10. 11. 11:25
반응형

코드 우선 마이그레이션을 비활성화하려면 어떻게해야합니까?


EF5에 코드 우선 엔터티 모델이 있습니다. 하지만 데이터베이스 변경 사항을 수동으로 관리하고 싶습니다. EF가 기존 데이터베이스와 모든 데이터를 수정하는 것을 원하지 않습니다. 그러나 EF 매핑과 데이터베이스에서 병렬 변경을 수행하면 EF가 제대로 작동하지 않고 코드 우선 마이그레이션을 사용해야한다고 알려줍니다. 이 기능을 어떻게 끄나요?


Database.SetInitializer를 null로 설정합니다.

public class DatabaseContext: DbContext
{
    //the base accepts the name of the connection string provided in the web.config as a parameter
    public DatabaseContext()
        : base("DatabaseContext")
    {
        //disable initializer
        Database.SetInitializer<DatabaseContext>(null);
    }

그래서 내가 찾은 가장 완전한 대답은 다음과 같습니다.

  1. Migrations프로젝트 내의 폴더를 삭제 하십시오.
  2. Database.SetInitializer<DatabaseContext>(null);DatabaseContext 이니셜 라이저 내부에 설정 하십시오.
  3. __MigrationHistory데이터베이스 내의 테이블을 삭제하십시오 . EF6 +의 경우 테이블이 아래에 Tables있지만 이전 버전의 경우 System Tables.
  4. 빌드하고 실행하십시오.
  5. 이익.

마이그레이션을 완전히 끄려면 다음을 수행하십시오.

https://stackoverflow.com/a/9709407/141172

그러나 코드 우선 마이그레이션을 활성화 한 상태로 유지하는 것이 더 낫다는 것을 알았지 만 -ScriptEF가 각 데이터베이스 (개발, QA, 프로덕션)에 수동으로 적용 할 수있는 DB 변경 스크립트를 생성 하도록하는 옵션을 사용합니다 .

Update-Database -Script -ProjectName MyProject -StartupProjectName MyProject

그런 식으로 EF가 나를 위해 변경 스크립트를 생성하고 적용되는 변경 사항을 여전히 완전히 제어 할 수 있습니다. 다른 소스 코드와 마찬가지로 변경 스크립트를 버전 화합니다.


이미 마이그레이션을 사용한 경우 이니셜 라이저 만 변경해도 도움이되지 않습니다. Management Studio로 이동하여 데이터베이스 테이블을 열고 System Tables폴더 로 이동하여 __MigrationHistory거기에있는 테이블을 제거해야 합니다 (EF6 이상의 경우 바로 아래에 있음 Tables). 이렇게하면 마이그레이션이 영구적으로 비활성화됩니다.


이 "문제"를 다음과 같이 해결했습니다.

  1. 데이터베이스에서 "_MigrationHistory"테이블을 삭제합니다.
  2. 프로젝트에서 "Migrations"폴더를 삭제합니다.
  3. EDMX 파일 업데이트 중.
  4. 프로젝트를 정리하고 다시 빌드하십시오.

내 환경은

1. Visual Studio 2017 15.8.2
2. ASP NET MVC project
3. .NET Framework 4.6.1
4. Entity Framework 6.2.0

참고 URL : https://stackoverflow.com/questions/14654055/how-can-i-disable-code-first-migrations

반응형