[blazor] [2] CRUD를 구현하기(Er Core DbContext구현 및 데이터 조회)

코찔찔이·2023년 8월 15일
0

blazor강의 따라하기

목록 보기
18/23
  1. VideoAppCoreModels 프로젝트에서 Dbcontext 생성 및 Er Core 사용 테스트
  2. 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

1. nuget에서 종속성 다운로드.


2. VideoDbContext.cs 생성

  1. VideoDbContext는 공식과 같은 것으로 따라서 생성
  2. OnConfiguring는 .net core에서는 사용 하지 않음.
  3. Videos 객체는 테이블명과 동이 해야 함.
  • VideoDbContext
//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; }
    }
}

3. 새로 생성한 VideoDbContext를 블레이저 프로젝트에서 DbContext등록을 해줌.

  1. Db접속 정보는 appsettings.json에 정의된 Db 접속 문자열을 가지고 옴.

  • Program.cs
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();

4. VideoDbContext.cs 테스트 및 view 화면에 데이터 출력

  1. FrmDbContextTest.razor 페이지 생성
  2. 라우팅 정보 입력 (@page "/Videos/FrmDbContextTest")
  3. 모델 프로젝트 참조추가(@using VideoAppCoreModels;)
  4. VideoDbContext 주입(@inject VideoDbContext videoDbContext)
  • FrmDbContextTest.razor
@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();
    }

}

5. db에 테스트 데이터 입력

위와 같이 VideoDbContext를 이용해 Db와 연결 확인.

0개의 댓글