작업을 하다 보면 DB를 잘못 만들어 과거로 돌아가고 싶을때가 있다.
이때는 엔터티 프레임워크에서 제공하는 롤백을 이용하면 손쉽게 과거로 돌아갈 수 있다.
이 글을 읽기 전 선수 지식 포스팅
초기 세팅
1) 최초 DB 연결 및 테이블 생성용 클래스 만들기
using Microsoft.EntityFrameworkCore;
public class TestDbContext : DbContext
{
public DbSet<Player> Players { get; set;}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=PlayerDB;Integrated Security=True;");
}
}
public class Player
{
public int Id { get; set; }
public string? Name { get; set; }
}
마이그레이션 및 데이터베이스 적용
add-migration first
update-database
DB 생성 완료
2) 클래스 수정 후 2번째 마이그레이션 파일 생성
age 프러퍼티 추가
public class Player
{
public int Id { get; set; }
public string? Name { get; set; }
public int age { get; set; } //새로 추가
}
2번째 마이그레이션 파일 및 DB 수정
add-migration second
update-database
DB 생성 완료
3) 클래스 수정 후 3번째 마이그레이션 파일 생성
Email 프러퍼티 추가
public class Player
{
public int Id { get; set; }
public string? Name { get; set; }
public int age { get; set; }
public string? Email { get; set; } //새로 추가
}
3번째 마이그레이션 파일 및 DB 수정
add-migration third
update-database
DB 생성 완료
롤백하는 방법
여기서 [ic]Email[/ic]컬럼을 제거하고 싶다.
그러기 위해선 2번째 마이그레이션을 했던 시기로 돌아가야 한다.
어떻게 할까?
[ic]update-database [돌아가고싶은 마이그레이션 파일 이름] [/ic]
(마이그레이션 파일이름이 [ic]20230223020139_second[/ic]라면 [ic]_[/ic] 뒤 [ic]second[/ic]만 입력하면 된다.)
update-database second
//output
Build started...
Build succeeded.
Reverting migration '20230223020139_third'.
Done.
하지만 없어졌어야할 [ic]_third[/ic] 파일은 여전히 존재한다.
이때는 아래 명령어를 이용하면 정상적으로 삭제된다.
remove-migration
여기서 궁금증❓이 생길 수있다.
첫 마이그레이션 이전 상태(아무것도 안 한상태)로 돌아가고 싶다면?
이때는 [ic]update-database[/ic]뒤 [ic]0[/ic]을 붙여 주면 된다.
update-database 0
최초 생성한 DB가 갈끔하게 제거된다.
'c#' 카테고리의 다른 글
[c# Linq] Select vs SelectMany 차이 (0) | 2023.03.20 |
---|---|
[c# ] 필드 | 프러퍼티 앞에 붙어 있는 required는 뭘까? (0) | 2023.03.13 |
[c#] json 파싱하는법 (0) | 2023.02.23 |
C#에서 파이썬 파일 실행 시키는 방법 완벽정리(with Process) (1) | 2023.01.03 |
[c#] Entity Framework 사용 방법(code-first) (0) | 2022.08.19 |
댓글