이 섹션에서는 Entity Framework Core를 사용하여 데이터베이스 테이블에 초기 레코드를 씨딩하는 방법을 배웁니다.
이 과정은 애플리케이션의 데이터 모델을 데이터베이스와 동기화하고, 초기 데이터를 테이블에 자동으로 삽입하여 개발 과정을 용이하게 합니다.
- ApplicationDbContext 수정:
ApplicationDbContext
내에서OnModelCreating
메서드를 오버라이드하여 모델 생성 시 데이터베이스 테이블에 초기 레코드를 씨딩합니다.ModelBuilder.Entity<Plant>().HasData()
메서드를 사용하여 씨딩할 레코드를 정의합니다. - 씨딩 데이터 정의:
HasData
메서드 내에서new Plant{}
를 사용하여 씨딩할 Plant 객체를 생성하고, 필요한 속성(예: ID, 이름, 세부 정보, 이미지 URL 등)을 설정합니다. 이 예제에서는 5개의 Plant 레코드를 씨딩합니다. - 마이그레이션 추가: Package Manager Console을 사용하여
Add-Migration
명령어로 새 마이그레이션을 추가합니다. 이 마이그레이션은 씨딩할 데이터를 포함합니다. - 데이터베이스 업데이트:
Update-Database
명령어를 실행하여 새 마이그레이션을 적용하고 데이터베이스 테이블에 초기 레코드를 씨딩합니다. - SQL Server Management Studio(SSMS) 확인: SSMS를 사용하여 데이터베이스에 접속하고, 씨딩된 레코드가 성공적으로 추가되었는지 확인합니다.
- 마이그레이션 관리: 이미 적용된 마이그레이션을 삭제하지 않고, 필요한 변경사항이 있을 경우 새로운 마이그레이션을 추가하여 적용합니다. Entity Framework Core는 이미 적용된 마이그레이션과 새로운 마이그레이션 사이의 차이점을 자동으로 관리합니다.
// ApplicationDbContext.cs
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Plant>().HasData(
new Plant
{
Id = 1,
Name = "여인초",
Details = "여인초는 마다가스카르 원산지로 플랜테리어 실내조경 인테리어 식물로 꾸준히 많은 사랑을 받고 있습니다.",
ImageUrl = "https://shop-phinf.pstatic.net/20231110_61/1699592764107jn9o8_JPEG/23118954104082569_1998215622.jpg?type=m510",
Occupancy = 4,
Rate = 200,
Size = 550,
CreatedDate = DateTime.Now
},
new Plant
{
Id = 2,
Name = "뱅갈고무나무",
Details = "실내에서도 튼튼하고 싱그러운 잎이 매력적인 '뱅갈고무나무'는 열대성 관상수로 다양한 카페 매장이나 사무실 등의 플랜테리어 식물로 많은 사랑을 받고 있습니다.",
ImageUrl = "https://shop-phinf.pstatic.net/20231109_39/1699514252955SFGey_JPEG/51586640329505362_16946473.jpg?type=m510",
Occupancy = 4,
Rate = 300,
Size = 550,
CreatedDate = DateTime.Now
},
new Plant
{
Id = 3,
Name = "휘커스움베르타",
Details = "휘커스움베르타는 무화과나무속 아프리카 원산지로 플랜테리어 실내조경 인테리어 식물로 꾸준히 많은 사랑을 받고 있습니다.",
ImageUrl = "https://shop-phinf.pstatic.net/20240202_296/1706848835240pVrYo_JPEG/34151519097359293_895289601.jpg?type=m510",
Occupancy = 4,
Rate = 400,
Size = 450,
CreatedDate = DateTime.Now
},
new Plant
{
Id = 4,
Name = "아레카야자",
Details = "아레카 야자는 마다가스카르 원산지로 카페 매장이나 사무실 등에 배치하면 좋으며 플랜테리어 인테리어 식물로 꾸준히 많은 사랑을 받고 있습니다.",
ImageUrl = "https://shop-phinf.pstatic.net/20240131_46/1706676785751F0ecb_JPEG/107812684413121543_403150541.jpg?type=m510",
Occupancy = 4,
Rate = 550,
Size = 600,
CreatedDate = DateTime.Now
},
new Plant
{
Id = 5,
Name = "크로톤",
Details = "크로톤은 화려하고 다채로운 색상의 건강한 잎을 지니고 있어 실내 인테리어 환경과 잘 어울리며, 관상용으로 뛰어나 승진이나 개업선물용으로 사랑받는 식물입니다.",
ImageUrl = "https://shop-phinf.pstatic.net/20231013_237/1697184041025Ioq5O_PNG/44331539823884559_499226285.png?type=m510",
Occupancy = 4,
Rate = 600,
Size = 550,
CreatedDate = DateTime.Now
});
}
// 패키지 관리자 콘솔
PM> add-migration SeedPlantTable
PM> update-database
이 과정을 통해 개발자는 Entity Framework Core를 사용하여 데이터베이스 테이블에 초기 데이터를 씨딩할 수 있으며, 애플리케이션 개발 및 테스트 과정을 보다 효율적으로 진행할 수 있습니다. 데이터 씨딩은 애플리케이션의 초기 상태를 설정하고, 개발 및 테스트 과정에서 필요한 데이터를 미리 준비하는 데 유용합니다.
프로젝트 리소스
https://github.com/kimdaewoong2022/MorePlants_WebAPI/tree/1b533e4232082a0eb1197465727232ff03fc713e