[C#/ASP.NET MVC/.NETCORE] ServiceProviderServiceExtensions 클래스 : GetRequiredService<T> 확장 메소드를 사용해 데이터베이스 컨텍스트 구하기
C#/ASP.NET MVC 2020. 10. 18. 15:10728x90
반응형
728x170
▶ Models/MovieData.cs
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Linq;
using TestProject.Data;
namespace TestProject.Models
{
/// <summary>
/// 영화 데이터
/// </summary>
public static class MovieData
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 초기화하기 - Initialize(serviceProvider)
/// <summary>
/// 초기화하기
/// </summary>
/// <param name="serviceProvider">서비스 제공자</param>
public static void Initialize(IServiceProvider serviceProvider)
{
using(var context = new DatabaseContext(serviceProvider.GetRequiredService<DbContextOptions<DatabaseContext>>()))
{
if(context.Movie.Any())
{
return;
}
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();
}
}
#endregion
}
}
728x90
▶ Program.cs
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using TestProject.Models;
namespace TestProject
{
/// <summary>
/// 프로그램
/// </summary>
public class Program
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 프로그램 시작하기 - Main(argumentArray)
/// <summary>
/// 프로그램 시작하기
/// </summary>
/// <param name="argumentArray">인자 배열</param>
public static void Main(string[] argumentArray)
{
IHost host = CreateHostBuilder(argumentArray).Build();
using(IServiceScope scope = host.Services.CreateScope())
{
IServiceProvider serviceProvider = scope.ServiceProvider;
try
{
MovieData.Initialize(serviceProvider);
}
catch(Exception exception)
{
ILogger<Program> logger = serviceProvider.GetRequiredService<ILogger<Program>>();
logger.LogError(exception, "데이터베이스에 데이터 추가시 에러가 발생했습니다.");
}
}
host.Run();
}
#endregion
#region 호스트 빌더 생성하기 - CreateHostBuilder(argumentArray)
/// <summary>
/// 호스트 빌더 생성하기
/// </summary>
/// <param name="argumentArray">인자 배열</param>
/// <returns>호스트 빌더</returns>
public static IHostBuilder CreateHostBuilder(string[] argumentArray) =>
Host.CreateDefaultBuilder(argumentArray)
.ConfigureWebHostDefaults
(
builder =>
{
builder.UseStartup<Startup>();
}
);
#endregion
}
}
300x250
※ TestDB 데이터베이스 생성
1. 비주얼 스튜디오를 실행한다.
2. 비주얼 스튜디오에서 [보기] / [SQL Server 개체 탐색기] 메뉴를 클릭한다.
3. [SQL Server 개체 탐색기]에서 [SQL Server] / [(localdb)MSSQLLocalDB...] / [데이터베이스] 노드 위에서 마우스 오른쪽 버튼을 클릭한다.
4. 컨텍스트 메뉴에서 [새 데이터베이스 추가] 메뉴를 클릭한다.
5. [데이터베이스 만들기] 대화 상자에서 아래와 같이 입력하고 [확인] 버튼을 클릭한다.
6. 비주얼 스튜디오에서 [도구] / [NuGet 패키지 관리자] / [패키지 관리자 콘솔] 메뉴를 클릭한다.
7. [패키지 관리자 콘솔]에서 아래 명령을 실행한다.
Update-Database
728x90
반응형
그리드형(광고전용)
'C# > ASP.NET MVC' 카테고리의 다른 글
[C#/ASP.NET MVC/.NETCORE] dotnet new mvc 명령 : MVC 웹앱 만들기 (0) | 2020.10.18 |
---|---|
[C#/ASP.NET MVC/.NETCORE] 스캐폴딩 기능을 사용해 RAZOR 페이지 웹앱 만들기 (최종) (0) | 2020.10.18 |
[C#/ASP.NET MVC/.NETCORE] BindPropertyAttribute 클래스 : SupportsGet 속성 사용하기 (0) | 2020.10.18 |
[C#/ASP.NET MVC/.NETCORE] @page 지시문 : 경로 템플리트 추가하기 (0) | 2020.10.18 |
[C#/ASP.NET MVC/.NETCORE] @page 지시문 : 경로 템플리트 추가하기 (0) | 2020.10.18 |
[C#/ASP.NET MVC/.NETCORE] @model 지시문 사용하기 (0) | 2020.10.18 |
[C#/ASP.NET MVC/.NETCORE] @page 지시문 사용하기 (0) | 2020.10.18 |
[C#/ASP.NET MVC/.NETCORE] dotnet aspnet-codegenerator razorpage 명령 : 도움말 보기 (0) | 2020.10.18 |
[C#/ASP.NET MVC/.NETCORE] dotnet aspnet-codegenerator razorpage 명령 : 스캐폴딩 기능을 사용해 CRUD 페이지 추가하기 (0) | 2020.10.18 |
[C#/ASP.NET MVC/.NETCORE] Entity Framework Core를 사용해 SQL Server 접속하기 (0) | 2020.10.18 |
댓글을 달아 주세요