EF5에 코드 우선 엔터티 모델이 있습니다. 그러나 데이터베이스 변경 사항을 수동으로 관리하고 싶습니다. EF가 기존 데이터베이스와 모든 데이터를 수정하는 것을 원하지 않습니다. 그러나 EF 매핑과 데이터베이스에서 병렬 변경을 수행하면 EF가 제대로 작동하지 않고 코드 우선 마이그레이션을 사용해야한다고 알려줍니다. 이 기능을 어떻게 해제합니까?
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);
}
__MigrationHistory
. 최신 마이그레이션이 없다는 사실을 무시하려는 경우 어쨌든 해. 제 경우에는 개발 환경에서 마이그레이션을 사용하지만 프로덕션에 배포 할 때는 SSDT를 사용하여 데이터베이스를 업데이트합니다. 따라서 EF는 __MigrationHistory
최신 마이그레이션이 없기 때문에 모델이 변경되었다고 불평 하지만 데이터베이스가 업데이트되었음을 보장 할 수 있습니다.
Database.SetInitializer
생성자에서 클래스 생성자로 이동하는 것이 좋습니다 . 이렇게하면 통화가 한 번만 이루어집니다.
그래서 내가 찾은 가장 완전한 대답은 다음과 같습니다.
Migrations
프로젝트 내의 폴더를 삭제 하십시오.Database.SetInitializer<DatabaseContext>(null);
DatabaseContext 이니셜 라이저 내부에 설정 하십시오.__MigrationHistory
데이터베이스 내의 테이블을 삭제하십시오 . EF6 +의 경우 테이블이 아래에 Tables
있지만 이전 버전의 경우 System Tables
.__MigrationHistory
내 애플리케이션이 시작될 때마다 존재를 확인 하여 내 앱의 시작 시간에 몇 밀리 초를 더 추가합니다. __MigrationHistory
수표를 완전히 비활성화하는 방법이 있습니까?
마이그레이션을 완전히 끄려면 다음을 수행하십시오.
https://stackoverflow.com/a/9709407/141172
그러나 코드 우선 마이그레이션을 활성화 한 상태로 유지하는 것이 더 낫다는 것을 알았지 만 -Script
EF가 각 데이터베이스 (개발, QA, 프로덕션)에 수동으로 적용 할 수있는 DB 변경 스크립트를 생성 하도록하는 옵션을 사용했습니다 .
Update-Database -Script -ProjectName MyProject -StartupProjectName MyProject
그런 식으로 EF가 나를 위해 변경 스크립트를 생성하고 적용되는 변경 사항을 여전히 완전히 제어 할 수 있습니다. 다른 소스 코드처럼 변경 스크립트를 버전 화합니다.
completely turn off migrations
. 이를 위해 : 추가 Database.SetInitializer<YourContextType>(null)
응용 프로그램의 시동을
이미 마이그레이션을 사용한 경우 이니셜 라이저 만 변경해도 도움이되지 않습니다. Management Studio로 이동하여 데이터베이스 테이블을 열고 System Tables
폴더 로 이동하여 __MigrationHistory
거기에있는 테이블을 제거해야 합니다 (EF6 이상의 경우 바로 아래에 있음 Tables
). 이렇게하면 마이그레이션이 영구적으로 비활성화됩니다.
System Tables
.
sp_rename
. 이니셜 라이저도 비활성화했습니다.
이 "문제"를 다음과 같이 해결했습니다.
내 환경의 구성은 다음과 같습니다.
1. Visual Studio 2017 15.8.2
2. ASP NET MVC project
3. .NET Framework 4.6.1
4. Entity Framework 6.2.0
_MigrationHistory
자동으로 새 테이블을 생성 합니까?