5부. ASP.NET Core MVC 앱에서 데이터베이스 작업
참고 항목
이 문서의 최신 버전은 아닙니다. 현재 릴리스는 이 문서의 .NET 9 버전을 참조 하세요.
Important
이 정보는 상업적으로 출시되기 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적, 또는 묵시적인 보증을 하지 않습니다.
현재 릴리스는 이 문서의 .NET 9 버전을 참조 하세요.
작성자: Rick Anderson 및 Jon P Smith.
MvcMovieContext
개체는 데이터베이스에 연결하고 데이터베이스 레코드에 Movie
개체를 매핑하는 작업을 처리합니다. 데이터베이스 컨텍스트는 Program.cs
파일에서 종속성 주입 컨테이너에 등록됩니다.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));
ASP.NET Core 구성 시스템은 ConnectionString
키를 읽습니다. 로컬 개발의 경우 appsettings.json
파일에서 연결 문자열을 가져옵니다.
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-4ebefa10-de29-4dea-b2ad-8a8dc6bcf374;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Warning
이 문서에서는 사용자를 인증할 필요가 없는 로컬 데이터베이스를 사용합니다. 프로덕션 앱은 사용 가능한 가장 안전한 인증 흐름을 사용해야 합니다. 배포된 테스트 및 프로덕션 앱의 인증에 대한 자세한 내용은 보안 인증 흐름을 참조 하세요.
SQL Server Express LocalDB
LocalDB:
- Visual Studio와 함께 기본적으로 설치되는 SQL Server Express 데이터베이스 엔진 경량 버전입니다.
- 연결 문자열을 사용하여 주문형으로 시작합니다.
- 프로그램 개발을 목표로 합니다. 사용자 모드에서 실행되므로 복잡한 구성이 없습니다.
- 기본적으로 C:/Users/{user} 디렉터리에 .mdf 파일을 만듭니다.
데이터베이스 검사
보기 메뉴에서 SSOX(SQL Server 개체 탐색기)를 엽니다.
테이블(dbo.Movie
) > 뷰 디자이너를 Movie
마우스 오른쪽 단추로 클릭합니다.
ID
옆의 키 아이콘을 확인합니다. 기본적으로 EF는 ID
라는 속성을 기본 키로 만듭니다.
마우스 오른쪽 단추로 Movie
테이블을 클릭하고 데이터 보기를 선택합니다.
데이터베이스 시드
Models 폴더에 SeedData
라는 새 클래스를 만듭니다. 생성된 코드를 다음으로 바꿉니다.
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
데이터베이스에 영화가 있는 경우 시드 이니셜라이저가 반환되고 영화가 추가되지 않습니다.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
시드 이니셜라이저 추가
Program.cs
의 내용을 다음 코드로 바꿉니다. 새 코드가 강조 표시됩니다.
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
데이터베이스의 모든 레코드를 삭제합니다. 브라우저 또는 SSOX에서 삭제 링크를 사용하여 이를 수행할 수 있습니다.
앱을 테스트합니다. 시드 메서드가 실행되도록 파일의 Program.cs
코드를 호출하여 앱을 강제로 초기화합니다. 초기화를 강제로 수행하려면 Visual Studio에 열려 있는 명령 프롬프트 창을 닫고 Ctrl + F5를 눌러 다시 시작합니다.
앱이 시드된 데이터를 보여줍니다.
MvcMovieContext
개체는 데이터베이스에 연결하고 데이터베이스 레코드에 Movie
개체를 매핑하는 작업을 처리합니다. 데이터베이스 컨텍스트는 Program.cs
파일에서 종속성 주입 컨테이너에 등록됩니다.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
ASP.NET Core 구성 시스템은 ConnectionString
키를 읽습니다. 로컬 개발의 경우 appsettings.json
파일에서 연결 문자열을 가져옵니다.
"ConnectionStrings": {
"MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}
Warning
이 문서에서는 사용자를 인증할 필요가 없는 로컬 데이터베이스를 사용합니다. 프로덕션 앱은 사용 가능한 가장 안전한 인증 흐름을 사용해야 합니다. 배포된 테스트 및 프로덕션 앱의 인증에 대한 자세한 내용은 보안 인증 흐름을 참조 하세요.
SQL Server Express LocalDB
LocalDB:
- Visual Studio와 함께 기본적으로 설치되는 SQL Server Express 데이터베이스 엔진 경량 버전입니다.
- 연결 문자열을 사용하여 주문형으로 시작합니다.
- 프로그램 개발을 목표로 합니다. 사용자 모드에서 실행되므로 복잡한 구성이 없습니다.
- 기본적으로 C:/Users/{user} 디렉터리에 .mdf 파일을 만듭니다.
데이터베이스 검사
보기 메뉴에서 SSOX(SQL Server 개체 탐색기)를 엽니다.
테이블(dbo.Movie
) > 뷰 디자이너를 Movie
마우스 오른쪽 단추로 클릭합니다.
ID
옆의 키 아이콘을 확인합니다. 기본적으로 EF는 ID
라는 속성을 기본 키로 만듭니다.
마우스 오른쪽 단추로 Movie
테이블을 클릭하고 데이터 보기를 선택합니다.
데이터베이스 시드
Models 폴더에 SeedData
라는 새 클래스를 만듭니다. 생성된 코드를 다음으로 바꿉니다.
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
데이터베이스에 영화가 있는 경우 시드 이니셜라이저가 반환되고 영화가 추가되지 않습니다.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
시드 이니셜라이저 추가
Program.cs
의 내용을 다음 코드로 바꿉니다. 새 코드가 강조 표시됩니다.
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
데이터베이스의 모든 레코드를 삭제합니다. 브라우저 또는 SSOX에서 삭제 링크를 사용하여 이를 수행할 수 있습니다.
앱을 테스트합니다. 시드 메서드가 실행되도록 파일의 Program.cs
코드를 호출하여 앱을 강제로 초기화합니다. 초기화를 강제로 수행하려면 Visual Studio에 열려 있는 명령 프롬프트 창을 닫고 Ctrl + F5를 눌러 다시 시작합니다.
앱이 시드된 데이터를 보여줍니다.
MvcMovieContext
개체는 데이터베이스에 연결하고 데이터베이스 레코드에 Movie
개체를 매핑하는 작업을 처리합니다. 데이터베이스 컨텍스트는 Program.cs
파일에서 종속성 주입 컨테이너에 등록됩니다.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
ASP.NET Core 구성 시스템은 ConnectionString
키를 읽습니다. 로컬 개발의 경우 appsettings.json
파일에서 연결 문자열을 가져옵니다.
"ConnectionStrings": {
"MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}
Warning
이 문서에서는 사용자를 인증할 필요가 없는 로컬 데이터베이스를 사용합니다. 프로덕션 앱은 사용 가능한 가장 안전한 인증 흐름을 사용해야 합니다. 배포된 테스트 및 프로덕션 앱의 인증에 대한 자세한 내용은 보안 인증 흐름을 참조 하세요.
SQL Server Express LocalDB
LocalDB:
- Visual Studio와 함께 기본적으로 설치되는 SQL Server Express 데이터베이스 엔진 경량 버전입니다.
- 연결 문자열을 사용하여 주문형으로 시작합니다.
- 프로그램 개발을 목표로 합니다. 사용자 모드에서 실행되므로 복잡한 구성이 없습니다.
- 기본적으로 C:/Users/{user} 디렉터리에 .mdf 파일을 만듭니다.
데이터베이스 검사
보기 메뉴에서 SSOX(SQL Server 개체 탐색기)를 엽니다.
테이블(dbo.Movie
) > 뷰 디자이너를 Movie
마우스 오른쪽 단추로 클릭합니다.
ID
옆의 키 아이콘을 확인합니다. 기본적으로 EF는 ID
라는 속성을 기본 키로 만듭니다.
마우스 오른쪽 단추로 Movie
테이블을 클릭하고 데이터 보기를 선택합니다.
데이터베이스 시드
Models 폴더에 SeedData
라는 새 클래스를 만듭니다. 생성된 코드를 다음으로 바꿉니다.
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
데이터베이스에 영화가 있는 경우 시드 이니셜라이저가 반환되고 영화가 추가되지 않습니다.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
<a name=snippet_"si">
시드 이니셜라이저 추가
Program.cs
의 내용을 다음 코드로 바꿉니다. 새 코드가 강조 표시됩니다.
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
데이터베이스의 모든 레코드를 삭제합니다. 브라우저 또는 SSOX에서 삭제 링크를 사용하여 이를 수행할 수 있습니다.
앱을 테스트합니다. 시드 메서드가 실행되도록 파일의 Program.cs
코드를 호출하여 앱을 강제로 초기화합니다. 초기화를 강제로 수행하려면 Visual Studio에 열려 있는 명령 프롬프트 창을 닫고 Ctrl + F5를 눌러 다시 시작합니다.
앱이 시드된 데이터를 보여줍니다.
MvcMovieContext
개체는 데이터베이스에 연결하고 데이터베이스 레코드에 Movie
개체를 매핑하는 작업을 처리합니다. 데이터베이스 컨텍스트는 Program.cs
파일에서 종속성 주입 컨테이너에 등록됩니다.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
ASP.NET Core 구성 시스템은 ConnectionString
키를 읽습니다. 로컬 개발의 경우 appsettings.json
파일에서 연결 문자열을 가져옵니다.
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-7dc5;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Warning
이 문서에서는 사용자를 인증할 필요가 없는 로컬 데이터베이스를 사용합니다. 프로덕션 앱은 사용 가능한 가장 안전한 인증 흐름을 사용해야 합니다. 배포된 테스트 및 프로덕션 앱의 인증에 대한 자세한 내용은 보안 인증 흐름을 참조 하세요.
SQL Server Express LocalDB
LocalDB:
- Visual Studio와 함께 기본적으로 설치되는 SQL Server Express 데이터베이스 엔진 경량 버전입니다.
- 연결 문자열을 사용하여 주문형으로 시작합니다.
- 프로그램 개발을 목표로 합니다. 사용자 모드에서 실행되므로 복잡한 구성이 없습니다.
- 기본적으로 C:/Users/{user} 디렉터리에 .mdf 파일을 만듭니다.
데이터베이스 시드
Models 폴더에 SeedData
라는 새 클래스를 만듭니다. 생성된 코드를 다음으로 바꿉니다.
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
}
데이터베이스에 영화가 있는 경우 시드 이니셜라이저가 반환되고 영화가 추가되지 않습니다.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
시드 이니셜라이저 추가
Program.cs
의 내용을 다음 코드로 바꿉니다. 새 코드가 강조 표시됩니다.
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
데이터베이스의 모든 레코드를 삭제합니다. 브라우저 또는 SSOX에서 삭제 링크를 사용하여 이를 수행할 수 있습니다.
앱을 테스트합니다. 시드 메서드가 실행되도록 파일의 Program.cs
코드를 호출하여 앱을 강제로 초기화합니다. 초기화를 강제로 수행하려면 Visual Studio에 열려 있는 명령 프롬프트 창을 닫고 Ctrl + F5를 눌러 다시 시작합니다.
앱이 시드된 데이터를 보여줍니다.
MvcMovieContext
개체는 데이터베이스에 연결하고 데이터베이스 레코드에 Movie
개체를 매핑하는 작업을 처리합니다. 데이터베이스 컨텍스트는 Startup.cs
파일의 ConfigureServices
메서드에서 종속성 주입 컨테이너에 등록됩니다.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));
}
ASP.NET Core 구성 시스템은 ConnectionString
키를 읽습니다. 로컬 개발의 경우 appsettings.json
파일에서 연결 문자열을 가져옵니다.
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-2;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Warning
이 문서에서는 사용자를 인증할 필요가 없는 로컬 데이터베이스를 사용합니다. 프로덕션 앱은 사용 가능한 가장 안전한 인증 흐름을 사용해야 합니다. 배포된 테스트 및 프로덕션 앱의 인증에 대한 자세한 내용은 보안 인증 흐름을 참조 하세요.
SQL Server Express LocalDB
LocalDB:
- Visual Studio와 함께 기본적으로 설치되는 SQL Server Express 데이터베이스 엔진 경량 버전입니다.
- 연결 문자열을 사용하여 주문형으로 시작합니다.
- 프로그램 개발을 목표로 합니다. 사용자 모드에서 실행되므로 복잡한 구성이 없습니다.
- 기본적으로 C:/Users/{user} 디렉터리에 .mdf 파일을 만듭니다.
데이터베이스 검사
보기 메뉴에서 SSOX(SQL Server 개체 탐색기)를 엽니다.
마우스 오른쪽 단추로 Movie
테이블을 클릭하고 디자이너 보기를 선택합니다.
ID
옆의 키 아이콘을 확인합니다. 기본적으로 EF는 ID
라는 속성을 기본 키로 만듭니다.
마우스 오른쪽 단추로 Movie
테이블을 클릭하고 데이터 보기를 선택합니다.
데이터베이스 시드
Models 폴더에 SeedData
라는 새 클래스를 만듭니다. 생성된 코드를 다음으로 바꿉니다.
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
}
데이터베이스에 영화가 있는 경우 시드 이니셜라이저가 반환되고 영화가 추가되지 않습니다.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
시드 이니셜라이저 추가
Program.cs
의 내용을 다음 코드로 바꿉니다.
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using MvcMovie.Data;
using MvcMovie.Models;
using System;
namespace MvcMovie
{
public class Program
{
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
SeedData.Initialize(services);
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred seeding the DB.");
}
}
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
앱을 테스트합니다.
데이터베이스의 모든 레코드를 삭제합니다. 브라우저 또는 SSOX에서 삭제 링크를 사용하여 이를 수행할 수 있습니다.
Startup
클래스에서 메서드를 호출하여 앱을 강제로 초기화하면 시드 메서드가 실행됩니다. 초기화를 적용하려면 IIS Express를 중지하고 다시 시작해야 합니다. 다음 중 한 가지 방법을 사용하여 이를 수행할 수 있습니다.
알림 영역에서 IIS Express 시스템 트레이 아이콘을 마우스 오른쪽 단추로 클릭하고 종료 또는 사이트 중지를 탭합니다.
- 비 디버그 모드에서 VS를 실행했다면 F5 키를 눌러 디버그 모드에서 실행합니다.
- 디버그 모드에서 VS를 실행했던 경우 디버거를 중지하고 F5 키를 누릅니다.
앱이 시드된 데이터를 보여줍니다.
ASP.NET Core