2013-08-05 3 views
1

Entity Framework 5를 사용하여 응용 프로그램에서 코드 우선 마이그레이션을 사용하고 있습니다. 모든 개발자는 자신이 작업 한 데이터베이스를 가지고 있습니다.코드 마이그레이션에서 초기 코드 마이그레이션 건너 뛰기

내가 실수로 비울 수 있습니다. 더 이상 테이블이 없으며 이전 기록 테이블조차도 없습니다.

따라서 PM 콘솔을 통해 update-database을 실행하여 데이터베이스를 다시 업데이트하려고했습니다. immediatley는 테이블이 존재하지 않는다는 에러를 내 최초 코드 마이그레이션에서 만들어야한다고 전합니다.

흥미로운 점은 PM 콘솔에 어떤 마이그레이션이 적용되고 있는지, 즉 inital create 코드 마이그레이션이 포함되어 있지 않아 테이블을 전혀 만들지 않았고 나중에 마이그레이션 할 때 실패한다는 것입니다.

update-database -targetmigration:initialcreate을 실행 해 보았습니다.이 코드는 코드 마이그레이션이 존재하지 않지만 cs 파일의 직접 복사/붙여 넣기이므로 ID가 정확해야합니다 (참고 :이 방법은 다른 마이그레이션에도 적용됩니다).

나는 또한 'Target database is already at version 0'을주는 update-database -targetmigration:0update-database -targetmigration: $InitialDatabase을 시도했다.

나는 또한 데이터베이스를 모두 삭제하고 EF가 만들지 않았거나 시도하지 않았더라도 initialcreate 마이그레이션을 건너 뛰었습니다.

그렇다면 코드 마이그레이션에서 initalCreate 코드 마이그레이션을 실행하려면 어떻게해야합니까?

답변

2

팀 시나리오에서 EF 마이그레이션 작업을하는 것이 이상적이지 않습니다. 팀이 따라가는 가장 좋은 방법은 이 아니며 마이그레이션을 커밋하는 것입니다. 마이그레이션은 개인용이며 특정 데이터베이스 인스턴스에만 적용됩니다. 모두가 자신의 이주를 저지른다면 당신은 혼란에 빠지게됩니다.

질문에 직접 관련이있는 것은 아니지만 일부 사용자는 프로덕션 마이그레이션을 어떻게 처리하는지 궁금 할 수 있습니다. 간단히 말해서, 당신은하지 않습니다. 릴리스 관리자 또는 실제 라이브 릴리스를 수행 할 사람은 모두 번 변경 내용을 적용하기 위해 SQL을 생성 한 다음 DBA 또는 프로덕션 데이터베이스를 관리하는 사람에게 전달해야합니다.

즉, 설명하는 시나리오에서 데이터베이스를 비운 장소는 다음과 같습니다. 가장 좋은 해결 방법은 Migrations 폴더의 모든 마이그레이션을 삭제하는 것입니다. 특히 초기 마이그레이션 (개인용 코드베이스 외부에서 수행하지 않아도되므로 어쨌든 중요하지 않습니다.). 그런 다음 새 마이그레이션을 생성하면 EF가 현재 데이터베이스 상태 (비어 있음)를 앱의 상태와 비교하고 기본적으로 앱의 현재 상태를 기반으로 새로운 초기 마이그레이션을 만듭니다. 그런 다음이 마이그레이션을 적용 할 수 있습니다.

+0

이 접근법은 논리적이고 오류가없는 것처럼 보입니다. 나는 이런 식으로 생각하지 않았습니다. 팀 시나리오의 코드 마이그레이션이 항상 훌륭하게 작동하는 것은 아닙니다. 우리는 다음 프로젝트에서이 방법을 사용할 것을 고려할 것입니다. 또한 빈 데이터베이스에 대해 제공 한 솔루션이 훌륭하게 작동했습니다. 감사!! :) – Ruudt

관련 문제