2014-03-05 1 views
2

좋아, 그래서 나는 모든 데이터베이스 구조와 초기 데이터를 유지하기 위해 마이 그 레이션과 시드 코드에 전적으로 의존하고있다. 그렇기 때문에이 버전에서 수행중인 모든 변경 사항이 데이터베이스 (Stored Procs and Updates)에서 직접 작성되고 C# 코드 자체에서 변경된 사항이없는 상황에 직면하고 있습니다.새로운 빈 EF 마이그레이션을 강제 실행하는 방법?

질문 : 새로운 마이 그 레이션을 사용하여 이러한 특정 데이터베이스 변경 사항을 수행하고 싶기 때문에 (코드 추가가 변경되지 않아 코드가 변경되지 않기 때문에) 새로운 빈 코드를 어떻게 강제 적용 할 수 있습니까? 첫 번째 마이 그 레이션을 수동으로 내 변경 사항을 넣어?

+0

중복 가능 http://stackoverflow.com/questions/7667630/can-you-create-sql-views-stored-procedure-using-entity-framework-4-1-code-firs –

+0

중복되지 않았습니다. 질문은 코드 기반 마이그레이션에 관한 것이고 다른 하나는 코드 우선에 관한 것입니다. –

답변

2

빈 마이그레이션을 추가하고 Up 및 Down 메서드에 코드를 수동으로 추가해야합니다. 나는 사람들이 그 방법에 대한 코드가 ".designer"파일과 비슷한 도구에 의해 생성되어야한다고 생각하는 경향이 있다는 것을 알았지 만, 그렇지 않습니다. 실제로 실제로는 자기 편집과 코드 추가를 발견했습니다. 내가 스크립트 파일에서 실행하고이 같은 위의 방법에서 다음 실행해야 나는 모든 SQL 코드를 배치이를 위해 : http://elegantcode.com/2012/04/12/entity-framework-migrations-tips/

+0

문제점 : DbMigration의 부분 클래스로 마이그레이션 .cs 파일을 만들고 나서 "add-migration"명령으로 작성한 것과 동일한 부분 위아래 메서드를 만든 다음 "update-database"를 실행하십시오. "보류중인 코드 기반 마이그레이션이 없음"이라고 간단하게보고합니다./ –

+0

일반적으로 수행하는 것처럼 추가 마이그레이션을 사용하여 파일을 만들어야합니다. 그 다음에는 내가 제공 한 샘플 코드와 같은 Up 및 Down 메소드를 편집해야하는 빈 마이그레이션 파일이 생깁니다. 그렇게하면 Update-Database가 그 일을 할 것입니다. –

1

에서 :

public override void Up(){ 
    var dirBase = AppDomain.CurrentDomain.BaseDirectory.Replace(@"\bin",string.Empty) + @"\Migrations\SqlScripts"; 
    Sql(File.ReadAllText(dirBase + @"\CreateMyViews.sql")); 
    Sql(File.ReadAllText(dirBase + @"\CreateMySproc.sql")); 
} 

public override void Down(){ 
     var dirBase = AppDomain.CurrentDomain.BaseDirectory.Replace(@"\bin",string.Empty) + @"\Migrations\SqlScripts"; 
    Sql(File.ReadAllText(dirBase + @"\DropMySproc.sql")); 
    Sql(File.ReadAllText(dirBase + @"\DropMyViews.sql")); 
} 

나는 당신이이 링크를 읽어 권 해드립니다 패키지 관리자 콘솔이이 마이그레이션 템플릿을 생성합니다

Add-Migration "My new empty migration" 

명령을 실행

public partial class Mynewemptymigration : DbMigration 
{ 
    public override void Up() 
    { 
    } 

    public override void Down() 
    { 
    } 
} 

그런 다음 사용자 정의 위아래 마이그레이션 단계를 작성할 수 있습니다. 모델이 최신이 아닌 경우 마이그레이션 코드가 위아래로 표시됩니다. 이 경우 모델을 최신으로 설정 한 다음 빈 마이그레이션을 새로 추가해야합니다.