DB 먼저 만든 다음 .net core 6 프로젝트에 연결하기

1 개요[ | ]

1.1 문제점[ | ]

대부분의 튜토리얼에 나와있는 것 처럼 DB table을 코딩으로 구현하는 것은 실업무에서는 잘 안쓰는 듯
이미 만들어진 DB 테이블들을 가져와서 프로젝트에 연동하는 방법이 필요했음

2 본론[ | ]

2.1 개발환경[ | ]

.net core 6, Postgresql14(TimescaleDB) , visual studio 2022

2.2 작업방법[ | ]

2.2.1 web api 프로젝트 생성[ | ]

Create project vs.png

2.2.2 dotnet에서 패키지 추가[ | ]

C:\Users\Test>dotnet tool install --global dotnet-ef
다음 명령을 사용하여 도구를 호출할  있습니다. dotnet-ef
'dotnet-ef' 도구('6.0.9' 버전) 설치되었습니다.
C:\Users\Test>
C:\Users\Test>dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
  복원할 프로젝트를 확인하는 ...
  Writing C:\Users\KTDS\AppData\Local\Temp\tmp5841.tmp
info : X.509 certificate chain validation will use the default trust store selected by .NET.
info : 'C:\Users\Test\DbConnectTest.csproj' 프로젝트에 'Npgsql.EntityFrameworkCore.PostgreSQL' 패키지에 대한 PackageReference를 추가하는 중입니다.
info :   CACHE https://api.nuget.org/v3/registration5-gz-semver2/npgsql.entityframeworkcore.postgresql/index.json
info : C:\Users\Test\DbConnectTest.csproj의 패키지를 복원하는 ...
info : 'Npgsql.EntityFrameworkCore.PostgreSQL' 패키지는 'C:\Users\Test\DbConnectTest.csproj' 프로젝트에 지정된 모든 프레임워크와 호환됩니다.
info : 'Npgsql.EntityFrameworkCore.PostgreSQL' 패키지 '6.0.7' 버전에 대한 PackageReference가 'C:\Users\Test\DbConnectTest.csproj' 파일에서 업데이트되었습니다.
info : 자산 파일이 변경되지 않았습니다. 자산 파일 쓰기를 건너뜁니다. 경로: C:\Users\Test\obj\project.assets.json
log  : C:\Users\Test\DbConnectTest.csproj을() 113 ms 동안 복원했습니다.

C:\Users\Test>
C:\Users\Test>dotnet add package Microsoft.EntityFrameworkCore.Design
  복원할 프로젝트를 확인하는 ...
  Writing C:\Users\KTDS\AppData\Local\Temp\tmp31D5.tmp
info : X.509 certificate chain validation will use the default trust store selected by .NET.
info : 'C:\Users\Test\DbConnectTest.csproj' 프로젝트에 'Microsoft.EntityFrameworkCore.Design' 패키지에 대한 PackageReference를 추가하는 중입니다.
info :   GET https://api.nuget.org/v3/registration5-gz-semver2/microsoft.entityframeworkcore.design/index.json
info :   OK https://api.nuget.org/v3/registration5-gz-semver2/microsoft.entityframeworkcore.design/index.json 675밀리초
info :   GET https://api.nuget.org/v3/registration5-gz-semver2/microsoft.entityframeworkcore.design/page/0.0.1-alpha/3.1.4.json
info :   OK https://api.nuget.org/v3/registration5-gz-semver2/microsoft.entityframeworkcore.design/page/0.0.1-alpha/3.1.4.json 663밀리초
info :   GET https://api.nuget.org/v3/registration5-gz-semver2/microsoft.entityframeworkcore.design/page/3.1.5/6.0.1.json
info :   OK https://api.nuget.org/v3/registration5-gz-semver2/microsoft.entityframeworkcore.design/page/3.1.5/6.0.1.json 680밀리초
info :   GET https://api.nuget.org/v3/registration5-gz-semver2/microsoft.entityframeworkcore.design/page/6.0.2/7.0.0-rc.1.22426.7.json
info :   OK https://api.nuget.org/v3/registration5-gz-semver2/microsoft.entityframeworkcore.design/page/6.0.2/7.0.0-rc.1.22426.7.json 665밀리초
info : C:\Users\Test\DbConnectTest.csproj의 패키지를 복원하는 ...
info : 'Microsoft.EntityFrameworkCore.Design' 패키지는 'C:\Users\Test\DbConnectTest.csproj'
프로젝트에 지정된 모든 프레임워크와 호환됩니다.
info : 'Microsoft.EntityFrameworkCore.Design' 패키지 '6.0.9' 버전에 대한 PackageReference가 'C:\Users\Test\DbConnectTest.csproj' 파일에 추가되었습니다.
info : MSBuild 파일 C:\Users\Test\obj\DbConnectTest.csproj.nuget.g.props을() 생성하고 있습
니다.
info : 자산 파일을 디스크에 쓰는 중입니다. 경로: C:\Users\Test\obj\project.assets.json
log  : C:\Users\Test\DbConnectTest.csproj을() 157 ms 동안 복원했습니다.

C:\Users\Test>

2.2.3 DB context 자동완성(scaffold)[ | ]

dotnet ef dbcontext scaffold "Host=123.123.123.123:5432;Database=DatabaseName;Username=Username;Password=Password" Npgsql.EntityFrameworkCore.PostgreSQL -o Models -t 특정테이블명

2.2.4 program.cs 내 DBcontext 정보 추가[ | ]

builder.Services.AddDbContext<devices_medContext>(options =>
    options.UseNpgsql(builder.Configuration.GetConnectionString("DatabaseName")));

2.2.5 appsettings.json 내 connectionstring 정보 추가[ | ]

    "ConnectionStrings": {
        "DatabaseName": "Host=123.123.123.123:5432;Database=DatabaseName;Username=Username;Password=Password"
    }

2.2.6 Controller 자동완성(scaffold)[ | ]

TimescaleDB 의 경우 각 테이블에 primary key가 할당 안되어 Controller 자동완성 기능은 사용 불가
primary key가 있다면 아래와 같이 적용 가능
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet tool install -g dotnet-aspnet-codegenerator
dotnet-aspnet-codegenerator controller -name ControllerName -async -api -m ModelName -dc DbContextName -outDir Controllers

2.2.7 Controller 직접 작성[ | ]

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using DBquery.Models;
using System.Drawing;
using System.Diagnostics;

namespace Api.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ReadingController : ControllerBase
    {
        private readonly devices_medContext _context;
        public ReadingController(devices_medContext context)
        {
            _context = context;
        }
        [HttpGet("data")]
        public async Task<ActionResult<IEnumerable<Data>>> GetReadingItems()
        {

            if (_context.Readings == null)
            {
                return NotFound();
            }
            return await _context.Readings
                .Take(100)
                .ToListAsync();
        }
    }
}

2.3 결론[ | ]

기 구축된 DB 연동은 위와 같이 간단하게 가능하며 MS에서도 자세히 소개하고 있음 [1]
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}