본문 바로가기

study/100 days (100일 챌린지)

[웹개발 100일] Day 13 - 마이그레이션으로 테이블 생성하기 (+ 안 될 때 시도해볼 방법)

반응형




 

 
회사에서도 할 일 많고.. 요즘 너무 바쁘다
내가 좀 쉬는 걸 못 견디는 사람이라;;
주말에 아무것도 안 하는 날을 억지로 정해서 가만히 있어야 됨..
1월 말부터 안 쉬고 너무 달렸는데 이번 연휴에 꼭 하루 쉬어야겠다.
 
 


🚀 요약

작업 시간: 2시간
✅ 마이그레이션으로 필요한 테이블 전부 생성하기
 
 


🚀 ASP.NET ef core 환경에서 마이그레이션 하기

어제 테이블 하나 만드는 데 성공했으니 이제 필요한 나머지 테이블들도 마저 생성해야 한다!!
 
어제까지의 작업 정리 👇
[ASP.NET Core + PostgreSQL] ASP.NET EF Core + PostgreSQL 환경에서 마이그레이션 생성하고 적용하기

[ASP.NET Core + PostgreSQL] ASP.NET EF Core + PostgreSQL 환경에서 마이그레이션 생성하고 적용하기

ASP.NET EF Core + PostgreSQL 환경에서 마이그레이션 생성하고 적용하기  순서 요약DbContext와 모델 클래스 설정마이그레이션 추가 및 업데이트테이블이 정상적으로 생성되었는지 확인  1️⃣ AppDbCont

j-lisa-dev.tistory.com

 
 

필요한 모델 다 만들어줌
 

using Microsoft.EntityFrameworkCore;

public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }

    public DbSet<User> Users { get; set; }
    public DbSet<Event> Events { get; set; }
    public DbSet<EventParticipant> EventParticipants { get; set; }
    public DbSet<Category> Categories { get; set; }
    public DbSet<EventImage> EventImages { get; set; }
    public DbSet<Comment> Comments { get; set; }
    public DbSet<Like> Likes { get; set; }
    public DbSet<Notification> Notifications { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
    }
}

AppDbContext.cs
 

테이블 생성 완료!
 
 


 
오늘도 역시나 한 번에 되지 않았기 때문에..
 

🔍 테이블이 생성되지 않을 때 시도해볼 수 있는 방법

 
1️⃣ 데이터베이스 연결 확인

psql -h localhost -U postgres -d dbname
\l

psql 열어서 \l로 생성된 데이터베이스 목록 조회
appsettings.json 파일의 연결 정보와 맞는지 확인
 
 
 
2️⃣ 마이그레이션 롤백 후 다시 적용

dotnet ef migrations remove
dotnet ef migrations add NewMigration
dotnet ef database update

직전 마이그레이션 삭제 후 새로 생성해 적용
전체 삭제하고 새로 생성하고 싶다면 Migrations 폴더를 아예 삭제해버려도 된다.
 
 
 
3️⃣ 데이터베이스 삭제 후 다시 생성
여기까지 해도 제대로 테이블이 생성되지 않는다면 마이그레이션이 꼬였을 가능성이 있다.
이때는 데이터베이스를 깔끔히 삭제하고 처음부터 다시 시도해보는 게 좋을 수도 있다.
 

psql -h localhost -U postgres
DROP DATABASE dbname;
CREATE DATABASE dbname;

psql 접속 후 데이터베이스 삭제하고 다시 생성
 

ERROR:  database "postgres" is being accessed by other users
DETAIL:  There are 1 other session(s) using the database.

현재 접속한 데이터베이스를 삭제할 수 없으므로 다른 데이터베이스로 접속해야 한다.
 

\c template1

기본 제공되는 template1로 접속한 후 drop 쿼리를 다시 실행
 

\q

psql 종료
 

dotnet ef migrations add InitialCreate
dotnet ef database update

Migrations 폴더 삭제 후 새로운 마이그레이션 생성하고 데이터베이스에 적용
 
 
 
4️⃣ 필요한 패키지가 설치되어 있는지 확인

dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
dotnet restore

EF Core와 PostgreSQL 관련 패키지가 정상적으로 설치되었는지 확인
 

dotnet ef migrations add NewMigration
dotnet ef database update

새로운 마이그레이션 생성하고 데이터베이스에 적용
 
 
 

반응형