최근에 Entity Framework 4.1 Code First를 사용하여 프로그래밍을 해왔으며 개발을 좋아하지만 최종 계획과 급변하는 기능 목록만으로도 애플리케이션 요구 사항에 맞게 클래스 / 데이터베이스를 지속적으로 수정하고 있습니다.
개발 중에는 라이브 데이터가 없으며 전체 데이터베이스를 쉽게 삭제할 수 있으므로 라이브 상태 일 때 새 스키마를 사용하여 다시 만들 수 있습니다. 이는 매우 나쁩니다!
내가 볼 수있는 유일한 해결책은 메타 데이터 테이블을 삭제하고 수동으로 데이터베이스를 동기화 상태로 유지하거나 기본적으로 삭제 및 시드하는 것입니다.
데이터를 다시 생성하고 마이그레이션하는 것보다 열 / 테이블을 추가하는 것이 훨씬 쉽다고 생각하기 때문에 개인적으로 첫 번째 방법을 선호하지만, 뭔가를 놓치지 않으면 코드 우선에서 완전히 벗어납니다.
문제는 실제로 Code First가 초기 개발에 관한 것이며 프로덕션 환경에서 EF를 관리하기위한 좋은 전략은 무엇입니까?
답변
제 생각에는 코드의 자동 데이터베이스 생성은 개발 전용입니다. Stack Overflow에서 데이터베이스를 업그레이드하는 방법과 자동 기능이 프로덕션에서 왜 나쁜지에 대해 비슷한 질문에 대답했습니다.
데이터베이스 업그레이드는 수동 작업입니다. 테스트되지 않은 자동 매직은 없어야합니다. 또한 EF 4.1에는 현재 사용할 수있는 매직이 없습니다 ( ADO.NET 팀이 작업중인 기능에 대한 일부 프레젠테이션 만 있음 ).
웹 사이트가 어떻게 업그레이드되는지 더 잘 이해하기 위해이 질문 을 확인할 수도 있습니다 .
답변
업그레이드 스크립트를 유지 보수하십시오 .
데이터베이스 자체 에서 스키마 버전 으로 레코드가 보유 된 테이블을 유지 보수하십시오 .
응용 프로그램을 시작하면 바이너리에서 사용하는 버전과 비교하여 버전이 검색됩니다. 다른 경우 업그레이드 스크립트를 실행하거나 사용자에게 요청합니다.
데이터베이스를 먼저 백업하는 것을 잊지 마십시오.
답변
문제는 프로그래밍 모델과 런타임 환경이없는 런타임 환경을 연결한다는 점에서 결함이 있습니다.
먼저 코드는 주로 개발 속도 드라이버이며 실제로 런타임 시스템에 연결되어 있지 않습니다.
프로덕션 환경에서는 런타임에 DB 모델을 삭제 / 업데이트 할 수없는 구성 설정이 올바르게 설정되어 있습니다.