EF Core DbContext와 DB 상태에 대해 동의가 있어야 한다. 즉 어떤 것이 원본이고 어떤 것을 기준으로 할 것인지 정할 필요가 있다.
말그대로 코드를 원본으로 생각하는 것이다. 코드를 기준으로 DB를 설계하도록 하기 때문에 어떤 데이터가 삑사리가 나면 DB에서 잘못된 것으로 간주한다.
먼저 Migration을 만들어야 한다. migration을 만드는 것은 세이브 포인트를 정하는 것에 비유할 수 있는데, 패키지 관리자 콘솔을 열고 Add-Migration [name] 형식으로 지정할 수 있다.
Add-Migration save1을 입력했을 경우 Migration 폴더에 다음과 같은 파일이 생성된다.
Add-Migration을 하면 맨 처음에 DbContext를 찾아서 분석하고 DB모델링을 한다. DbContext를 상속받는 AppDbContext 클래스를 분석하고 최신 DB가 어떻게 정의되어 있는지 깨우치게 된다.
그다음 ~ModelSnapshot.cs을 이용해서 가장 마지막 migration 상태의 DB를 모델링하고 ~_save1.cs과 ~ModelSnapshot.cs를 비교해서 결과를 도출한다.
ModelSnapshot은 최신 DB 모델링 정보를 가지고 있고
Migrate.Designer.cs와 Migrate.cs는 Migration 관련 세부 정보를 가지고 있다.
~_save1.cs 안에 Up과 Down 함수가 있는데
Up : 이전 상태에서 save1로 가기 위해 어떤 변화가 일어나야 하는지 정의가 되어 있다.
Down : 현재 save1에서 이전 상태로 가기 위해서는 어떤 변화가 일어나야 하는지 정의하고 있다.
Script-Migration [from] [to] [options]
from과 to를 비워두면 무조건 최초~최후 버전으로 인식한다.
명령어를 입력하면 sql 스크립트가 뽑히는데, 이는 from에서 to로 가기 위한 SQL 스크립트이다
비추
Update-Database [options]
최신 상태로 갱신. save1, save2 Add-Migration을 순차적으로 실행했었다면, save1의 Up, save2의 Up이 순차적으로 호출되어 최신 상태로 갱신된다
만약 save2 상태에서 save1 상태로 되돌아가고 싶다면 다음과 같이 입력한다.
Update-Database save1
마지막 migration을 삭제하고 싶으면 다음과 같이 입력한다.
remove-migration