- VideoAppCoreModels 프로젝트에서 Dbcontext 생성 및 Er Core 사용 테스트
- nuget패키지에서 종속성 다운로드
1)Microsoft.EntityFrameworkCore.SqlServer 5.0.17
(.net Standard2.1을 지원하는 최신버전이라 5.0.17 설치
6버전 부터는 .net Standard를 지원하지 않음)
2)System.Data.SqlClient
3)System.Configuration.ConfigurationManager
4) Dapper
VideoDbContext
는 공식과 같은 것으로 따라서 생성OnConfiguring
는 .net core에서는 사용 하지 않음.Videos
객체는 테이블명과 동이 해야 함.
//Install-Package Microsoft.EntityFrameworkCore.SqlServer
//Install-Package System.Configuration.ConfigurationManager
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Text;
namespace VideoAppCoreModels
{
public class VideoDbContext : DbContext
{
public VideoDbContext(DbContextOptions<VideoDbContext> options)
: base(options)
{
//공식과 같은코드
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// 닷넷 프레임워크 기반에서 호출되는 코드 영역:
// App.Config 또는 Web.Config의 연결 문자열 사용
if(!optionsBuilder.IsConfigured)
{
string connectionString = ConfigurationManager.ConnectionStrings[
"DefaultConnection"].ConnectionString;
optionsBuilder.UseSqlServer(connectionString);
}
}
/// <summary>
/// 비디오앱
/// </summary>
public DbSet<Video> Videos { get; set; }
}
}
- Db접속 정보는
appsettings.json
에 정의된 Db 접속 문자열을 가지고 옴.
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI;
using Microsoft.EntityFrameworkCore;
using VideoAppCore.Areas.Identity;
using VideoAppCore.Data;
using VideoAppCoreModels;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddScoped<AuthenticationStateProvider, RevalidatingIdentityAuthenticationStateProvider<IdentityUser>>();
builder.Services.AddSingleton<WeatherForecastService>();
//새로운 DbContext 클래스 등록
builder.Services.AddDbContext<VideoDbContext>(options =>
options.UseSqlServer(connectionString));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/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.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");
app.Run();
- FrmDbContextTest.razor 페이지 생성
- 라우팅 정보 입력 (@page "/Videos/FrmDbContextTest")
- 모델 프로젝트 참조추가(@using VideoAppCoreModels;)
- VideoDbContext 주입(@inject VideoDbContext videoDbContext)
@page "/Videos/FrmDbContextTest"
@using VideoAppCoreModels;
@inject VideoDbContext videoDbContext
<h3>FrmDbContextTest</h3>
<ul>
@foreach(var video in videos)
{
<li>@video.Title, @video.Url</li>
}
</ul>
@code {
List<Video> videos;
protected override void OnInitialized()
{
videos = videoDbContext.Videos.ToList();
}
}
위와 같이 VideoDbContext를 이용해 Db와 연결 확인.