1

서로 다른 웹 응용 프로그램에 대해 서로 다른 데이터베이스 스키마가있는 거대한 데이터베이스가 있습니다. 예 : WebApp1은 Schema1.Tables를 사용합니다. WebApp2는 Schema2.Tables 등을 사용합니다.기존 "공유"데이터베이스에서 Entity Framework 4.3 마이그레이션

이제 Entity Framework 4.3.1을 사용할 새로운 웹 응용 프로그램 (WepApp3)을 개발 중입니다. WebApp3은 Schema3에만 관심을 가져야하며 Schema3의 일부인 데이터베이스 개체 만 사용해야합니다. WepApp3에서 일부 엔터티를 만들면이 엔터티를 schema3.tables로 데이터베이스에 어떻게 마이 그 레이션합니까? 아직 초기 마이그레이션을 수행해야합니까?

도와주세요.

+0

피드백 사이트에서 요청할 수 있습니다. [uservoice.com/a/bm8Gz](http://uservoice.com/a/bm8Gz) 귀하의 투표를 꼭 추가하십시오! – bricelam

답변

1

작동하는 것 같습니다. 나는 기존의 데이터베이스로 시작했다. 몇 가지 모델로 mvc 앱 (app1)을 만들었습니다. 그런 다음 데이터베이스에이 앱의 스키마를 만들었습니다. 귀하의 의견에 따라 모델에 대한 스키마를 지정했습니다. 그런 다음 코드 기반 마이그레이션 스크립트를 사용하여 데이터베이스를 업데이트했습니다. 마이그레이션 스크립트는 기존 스키마를 손상시키지 않고 새 스키마 아래에 2 개의 테이블을 생성했습니다. EF에서 변경 정보가있는 행이있는 __MigrationHistory 테이블을 만들었습니다. 그런 다음 다른 앱과 새 스키마를 만들고 마이그레이션 스크립트에서 약간의 조정을 통해 마이그레이션 프로세스를 반복했습니다. 이 스크립트에는 app1의 두 테이블을 다시 만드는 코드가 있습니다. 스크립트에서 해당 코드를 삭제했습니다. EF는 새 스키마 아래에 새 테이블을 만들었으며 새 변경 사항에 대한 정보가있는 __MigrationHistory 테이블에 새 행을 만들었습니다. 모든 기존 항목은 데이터를 포함하여 변경되지 않습니다.

1

동일한 데이터베이스에 여러 개의 EF 모델을 포함시킬 수는 없습니다. EF는 모델과 관련이없는 테이블을 만지면 안되지만 같은 데이터베이스에 다른 EF 앱을 추가하려는 경우 동일한 MetaData 테이블을 공유하려고하기 때문에 문제가 발생할 수 있습니다.

코드 처음 사용하는 새로운 모델을 생성 할 때, 당신은 그들이 DbContext의 일부가되어야하는 스키마를 지정할 수 있습니다

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<MyEntity>().ToTable("MyEntity", "Schema3"); 
} 

가 아니 공유가없는 경우 다른 데이터베이스로 스키마를 마이그레이션 할 수있는 옵션 애플 리케이션?

+0

안녕하세요. 리차드, 빠른 응답에 감사드립니다. 당신이 메타 데이터 테이블을 말했을 때 당신은 EdmMetaData 테이블을 참조 했습니까? 나는 EF 4.3이 EdmMetaData 테이블을 제거했다고 믿는다. 대신 코드 첫 번째 마이 그 레이션이 실행되면 __MigrationHistory 테이블이 생깁니다. 이 테이블을 기본 dbo 스키마 대신 스키마 아래에 둘 수 있습니까? 불행히도, 그것은 옵션이 아닙니다 :(. 개인적으로 그런 공유 데이터베이스가 마음에 들지 않지만 내 결정이 아닙니다. 감사합니다 ... – Amit

+0

사용하는 접근 방식에 따라 EdmMetaData 또는 __MigrationHistory 테이블 중 하나를 의미했습니다. 또한 한 데이터베이스에 2 가지 EF 모델을 갖는 방법을 찾고 있었지만 가능하지 않다고 생각합니다. – Richard

관련 문제