2014-07-16 3 views
2

bigint 형식으로 변경해야하는 시간 형식의 열이 있습니다. 필자가 볼 수있는 유일한 방법은 열을 삭제하고 bigint 형식의 새 열을 만드는 것입니다. 그 나는 다음 마이그레이션을 실행에 대한엔터티 프레임 워크 마이그레이션 이전 테이블의 데이터를 시드하는 방법

:

public partial class Migration1 : DbMigration 
{ 
    public override void Up() 
    { 
     DropColumn("dbo.MyDurations", "Duration"); 
     AddColumn("dbo.MyDurations", "Duration", c => c.Long(nullable: false)); 
    } 

    public override void Down() 
    { 
     DropColumn("dbo.MyDurations", "Duration"); 
     AddColumn("dbo.MyDurations", "Duration", c => c.Time(nullable: false, precision: 7)); 
    } 
} 

어떻게 시간 유형에서 현재 열에서 데이터를 얻을 TimeSpan.Ticks(duration)로 변환하여 새에 씨앗 할 수 있습니까?

내가 이해 한대로 구성 파일의 Seed(DbContext ctx) 함수의 데이터 만 시드 할 수 있습니다. 그러나 시드 방법은 마이그레이션 후에 실행됩니다. 마이그레이션을 적용하기 전에 데이터에 액세스 한 다음 마이그레이션을 적용한 다음 데이터를 시드 할 수 있습니까?

답변

2

Sql 메서드를 사용하여 마이그레이션에서 고유 한 Sql을 실행할 수 있습니다. 마이그레이션을 다음과 같이 변경해야합니다.

public override void Up() 
{ 

    AddColumn("dbo.MyDurations", "NewDuration", c => c.Long(nullable: false)); 
    Sql("UPDATE dbo.MyDurations SET NewDuration = Duration"); 
    DropColumn("dbo.MyDurations", "Duration"); 
    RenameColumn("dbo.MyDurations", "NewDuration", "Duration"); 
}