Entity Framework Code First는 생산에서 의미가없고 쓸모가 없으며 생산을위한 훌륭한 EF 전략은 무엇입니까?


29

최근에 Entity Framework 4.1 Code First를 사용하여 프로그래밍을 해왔으며 개발을 좋아하지만 최종 계획과 급변하는 기능 목록만으로도 애플리케이션 요구 사항에 맞게 클래스 / 데이터베이스를 지속적으로 수정하고 있습니다.

개발 중에는 라이브 데이터가 없으며 전체 데이터베이스를 쉽게 삭제할 수 있으므로 라이브 상태 일 때 새 스키마를 사용하여 다시 만들 수 있습니다. 이는 매우 나쁩니다!

내가 볼 수있는 유일한 해결책은 메타 데이터 테이블을 삭제하고 수동으로 데이터베이스를 동기화 상태로 유지하거나 기본적으로 삭제 및 시드하는 것입니다.

데이터를 다시 생성하고 마이그레이션하는 것보다 열 / 테이블을 추가하는 것이 훨씬 쉽다고 생각하기 때문에 개인적으로 첫 번째 방법을 선호하지만, 뭔가를 놓치지 않으면 코드 우선에서 완전히 벗어납니다.

문제는 실제로 Code First가 초기 개발에 관한 것이며 프로덕션 환경에서 EF를 관리하기위한 좋은 전략은 무엇입니까?


며칠 동안이 질문을하는 것이 의미가 있었는지, 이것이 여기에 가장 적합한 지 또는 스택 오버플로에 있는지 확실하지 않았습니다 ...
wilhil

답변:


15

제 생각에는 코드의 자동 데이터베이스 생성은 개발 전용입니다. Stack Overflow에서 데이터베이스를 업그레이드하는 방법과 자동 기능이 프로덕션에서 왜 나쁜지에 대해 비슷한 질문에 대답했습니다.

데이터베이스 업그레이드는 수동 작업입니다. 테스트되지 않은 자동 매직은 없어야합니다. 또한 EF 4.1에는 현재 사용할 수있는 매직이 없습니다 ( ADO.NET 팀이 작업중인 기능에 대한 일부 프레젠테이션있음 ).

웹 사이트가 어떻게 업그레이드되는지 더 잘 이해하기 위해이 질문 을 확인할 수도 있습니다 .


다시 안녕하세요! -당신은 EF 질문에 빨리! :) ... 내가 당신없이 어디에 있을지 모르겠다!
wilhil

몇 달이 지나고 프로그램이 완성되었습니다 ... 이것을 답변으로 표시하고 있지만, 무엇이 도움이되거나 도움이 될만한 리소스가 있는지 궁금합니다.
wilhil

2
"마이그레이션"의 첫 공개 미리보기가 릴리스되었습니다. blogs.msdn.com/b/adonet/archive/2011/07/27/…
Ladislav Mrnka

고마워, 지금보고있어! Code First로 개발하는 것을 좋아했지만 나중에 변경하는 것에 대해 너무 긴장하거나 걱정합니다!
wilhil

애플리케이션에서 사용하지 않는보고와 같은 다른 목적으로 StoredProcs 또는 뷰가 DB에서 직접 작성된 경우를 처리하는 방법 먼저 코드의 스키마 변경으로 어떤 SP가 영향을 받는지 알아야합니다.
softveda

5

업그레이드 스크립트를 유지 보수하십시오 .

데이터베이스 자체 에서 스키마 버전 으로 레코드가 보유 된 테이블을 유지 보수하십시오 .

응용 프로그램을 시작하면 바이너리에서 사용하는 버전과 비교하여 버전이 검색됩니다. 다른 경우 업그레이드 스크립트를 실행하거나 사용자에게 요청합니다.

데이터베이스를 먼저 백업하는 것을 잊지 마십시오.


다음 단계 : 해고;) 데이터베이스 업데이트는 먼저 백업없이 자동으로 실행되지 않아야하며, 한 명의 사용자가 최신 버전을 실행할 때가 아니라 다운 타임 일 수도 있습니다. 귀하의 접근 방식은 완벽합니다-수많은 오류로 더 큰 배치를 종료합니다.
TomTom

@TomTom : 그것은 다릅니다. 우리는 몇 년 동안 DB 응용 프로그램을 완벽하게 실행하고 있습니다. 정확히 너무 오래된 버전을 감지하면 응용 프로그램이 수행하는 새 릴리스의 자동 스키마 변경입니다. 백업은 매일 수행되며 모든 스키마 변경 내용은 이전 버전과 호환됩니다 (필드 및 테이블 만 추가하고 삭제하지 않음). 변경 내용이 이전 버전과 호환되지 않는 경우 언급 한 측정 값이 중요하며 모든 클라이언트 응용 프로그램이 동시에 업데이트되도록 보장 할 수는 없습니다 (예 : 대기업 DB).
Doc Brown

변경 사항이 사소한 것이 아니라면 맨 위에. 2tb 테이블에서 필드를 변경해보십시오 (그렇습니다, 나는 이것을 처리합니다-심지어 데이터 창고가 아닙니다). 필드를 추가 할 수없고 절대 정리할 수 없기 때문에 기술 부채가 누적되는 시나리오에 자신을 배치했습니다.
TomTom

2

문제는 프로그래밍 모델과 런타임 환경이없는 런타임 환경을 연결한다는 점에서 결함이 있습니다.

먼저 코드는 주로 개발 속도 드라이버이며 실제로 런타임 시스템에 연결되어 있지 않습니다.

프로덕션 환경에서는 런타임에 DB 모델을 삭제 / 업데이트 할 수없는 구성 설정이 올바르게 설정되어 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.