11

Entity Framework 코드 첫째는 새 프로젝트를 개발하기위한 훌륭한 프레임 워크입니다. 그러나 기존 데이터베이스를 확장하는 것은 어떻습니까?Entity Framework를 사용하여 데이터베이스 스키마 업데이트 코드 우선

예를 들어 단순히 기존 데이터 엔터티에 추가 속성을 추가하고 싶다면 어떻게해야합니까? 이 작업을 수행하는 데 "코드를 먼저"사용하는 방법이 있습니까? 아니면 SQL Server Management Studio 또는 이와 유사한 도구를 사용하여 직접 데이터베이스 열을 추가해야합니까?

스키마를 변경하면 처음부터 전체 데이터베이스를 다시 생성하는 방법을 찾았지만 데이터를 잃고 싶지는 않습니다.

내가 잘못 본 것이 아니라면 새로운 데이터베이스 변경 사항을 반영하는 SQL 스크립트를 생성 할 수있는 Ruby on Rails 용 도구가 있습니다. EF Code First에서도이 작업을 수행 할 수있는 방법이 있습니까?

+0

잃어 버리지 않으려는 크기가 큰 데이터가 있으면 ... 스키마 첫 번째 모델을 사용한다고 말하고 싶습니다. 이 옵션이 아닌가요? dba를 사용할 수 없다는 것 외에도 .. 코드를 처음 사용할 때 얻을 수있는 이점은 무엇입니까? 깨달으십시오 .... –

+0

@sam yi :이 게시물을 작성한 지 2 년 후 나는 귀하의 의견에 동의하는 경향이 있습니다. 코드 첫 번째 접근 방식이 여전히 개발자 관점에서 매력적으로 보이지만. SQL 커맨드를 사용하는 것보다 나중에 클래스에 속성을 추가하고 나중에 내 EF 클래스를 업데이트하는 것이 훨씬 쉽습니다. –

답변

8

현재 DB 스키마를 발전시키는 문제를 해결하는 EntityFramework.Migrations 라이브러리를 사용하고 있습니다. 스키마를 업데이트하기 위해 SQL 스크립트를 생성하는 마이그레이션 클래스를 생성합니다.

아직 베타 버전이지만 아직 유용하지 않습니다. 불행히도 데이터 마이그레이션 스크립트를 생성해야합니다.

자세한 내용은 here을 참조하십시오.

7

Unfortunatelly no. 현재 EF 코드에서 데이터베이스를 단계적으로 구축 할 수있는 방법은 없습니다. ADO.NET team described some approach이 작업을하고 있지만이 도구는 아직 게시되지 않았습니다. 유일한 방법은 데이터베이스 또는 모델의 첫 번째 접근 방식을 사용하는 것입니다. 즉, 데이터베이스에서 변경 사항을 직접 모델링하고 코딩 작업을 계속 진행하거나 EDMX 모델 및 Database Generation Power Pack을 사용하여 DB를 점진적으로 구축 할 수 있습니다. EFX 4.1에 추가 된 새 T4 템플릿으로 EDMX에서 DbContext을 생성 할 수는 있지만 템플릿으로 생성되는 엔티티 클래스를 정의 할 수는 없습니다.

3

현재 비슷한 문제가 발생하고 있습니다.

저는 EF 모델의 첫 번째 방법을 사용합니다. SQL EF가 생성하는 데이터베이스 프로젝트를 사용합니다.

기본적으로 나는 데이터베이스 프로젝트를 정상적으로 가지고 있지만 테이블 sql은 EF 모델에 의해 생성 된 sql입니다.

FYI 데이터베이스 프로젝트는 모든 데이터를 손실하지 않고 기존 데이터베이스의 변경 스크립트를 생성 할 수 있습니다. 수행중인 변경이 데이터에 해롭고 그러한 경우 실행되지 않을 경우 경고하기 위해 db 프로젝트를 설정할 수 있습니다.

내 솔루션을 수정하지 않았습니다. (ef가 SQL을 생성하는 데 사용하는 SsdlToSql10.tt을 변경합니다. 데이터베이스 프로젝트에보다 친숙하게 다가갑니다!).

+0

조언 해 주셔서 감사합니다.Visual Studio Database Schema 비교 도구를 사용하여 새 버전을 배포해야 할 때 스키마 마이그레이션을 생성합니다. 그것은 잘 작동하지만 더 자동화 된 솔루션을 환영합니다. 시간이 걸리면 데이터베이스 프로젝트를 살펴볼 것입니다. –

1

Visual Studio에는 도구 스키마 비교 도구가 있습니다. 코드를 수정 한 후에 데이터베이스를 생성 한 다음 스키마 비교를 사용하여 데이터베이스 프로젝트 또는 다른 데이터베이스를 점진적으로 수정하십시오.

+1

제안 해 주셔서 감사합니다. 바로 지금 제가하고있는 일입니다. 작동하지만 EF와 더 긴밀하게 통합 된 것을 찾고있었습니다. EF.Migrations는 실제로 제가 찾고있는 것입니다. –

관련 문제