2012-02-13 2 views
30

우리는 EntityFramework를 사용한 데이터베이스 첫 번째 접근법을 사용하고 있습니다. 우리는 여러 고객을 보유하고 있으며 새로운 제품 버전을 배포 할 때 SQL Compare과 같은 도구를 사용하여 DB 스키마 변경 사항을 "수동으로"적용합니다.데이터베이스 우선 접근을위한 EF 마이그레이션?

EF 마이그레이션이 고객 DB에 변경 사항을 자동으로 적용하는 방법은 있습니까?

+0

물론 나는 아무 것도 풀어주지 않을 것입니다. Code First Migration 기능은 데이터를 보존하는 것처럼 보입니다. DB와 비슷한 것을 원합니다. 사실 간단한 시나리오 - 새 테이블 추가, 새로운 필드 등 - – Shaddix

+0

데이터베이스를 사용하여 EF 마이그레이션과 비슷한 기능을 원하면 [FluentMigrator] (https://github.com/fluentmigrator/fluentmigrator) –

답변

14

내가 아는 한 EF 마이그레이션은 CodeFirst를 대상으로하는 제품이며 데이터베이스 우선 작동을 지원하지 않습니다.

CodeFirst는 사용자가 데이터베이스를 수동으로 변경하지 않는다고 가정합니다. 데이터베이스에 대한 모든 변경 사항은 코드 첫 번째 마이그레이션을 거치게됩니다.

+3

을 확인하십시오. 감사합니다. , 그것은 update-scripts가 현재 EF와 함께 갈 수있는 유일한 방법 인 것 같습니다. – Shaddix

+4

좋은 대안은 Database projects/SSDT이고 스키마를 비교하는 것입니다. –

2

있다고 생각합니다! 먼저 코드를 계속 진행해야합니다.

public class MyDbContext : DbContext 
{ 
    public MyDbContext() 
     : base("Name=DefaultConnection") 
    { 

    } 

    // DbSets ... 
} 

변화 그 첫 번째 코드를 사용하여 시작하려면 다음과 모든 마법 도구 (마이그레이션 등 :

는 EF DB가 먼저 당신을 위해 만든 다음 DbContext를 가지고 있다고 가정하자,이 작업을 수행하려면 .) : 그것은 EF는 이름 YourDbFileName하여 web.config 파일에서 로컬 컴퓨터에 SQL Express를 사용하여 새 연결 문자열을 생성하는 원인이

public class MyDbContext : DbContext 
{ 
    public MyDbContext() 
     : base("YourDbFileName") 
    { 

    } 

    // DbSets ... 
} 

, 단지 초기 DefaultConnection DB 같은 것을 먼저 만들었습니다.

귀하의 서버 및 기타 옵션에 따라 YourDbFileName ConStr을 편집하면됩니다.

자세한 정보 herehere.

0

그냥 DbContext 자식 개체에 대해보고이 방법을 찾습니다

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     throw new UnintentionalCodeFirstException(); 
    } 

이 댓글이 경우

throw new UnintentionalCodeFirstException(); 

은 다음 예외가 마이그레이션 작업에 던져되지 않을 것입니다. 상상할 수 있듯이, 마이그레이션은이 파트를 사용하여 각 엔티티의 구성이 어떤 테이블을 가지고 있는지 알 수 있습니다.

죄송합니다. 자세한 내용은 알려지지 않았지만, 더 자세히 알고 싶다면이 부분을 편집하여 기쁘게 생각합니다.