닷넷관련/ASP.NET CORE 🍔

EF : Entity Framework Core – Database first 사용해 보기

재우니 2024. 7. 10. 01:04

 

 

 

 

Database-First approach (데이터베이스 우선 접근 방식)은 이미 데이터베이스가 있고 앱에 대한 도메인 객체를 생성해야 하는 경우입니다. 이 접근 방식은 데이터베이스 중심적인 개발자이거나 데이터베이스가 이미 존재하고(예: 레거시 시스템) 앱이 이 데이터베이스와 통신하기만 하면 되는 경우에 특히 유용합니다.

 

 

dotnet tool 설치하기

 

dotnet -- version

dotnet tool list --global

dotnet tool install dotnet-ef --global

dotnet new classlib -f net8.0

dotnet add <project-name>.csproj package Microsoft.EntityFrameworkCore.Design

dotnet add <project-name>.csproj package Microsoft.EntityFrameworkCore.SqlServer

dotnet ef dbcontext scaffold "Server=.;Database=BikeStores2;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models --project <project-name>.csproj

 

 

 

dotnet tool  업데이트 하기

PS E:\sampleSource\aspnetcore\ef-demo> dotnet tool update --global dotnet-ef
'dotnet-ef' 도구가 '8.0.6' 버전에서 '8.0.7' 버전으로 업데이트되었습니다.

 

 

기존 SQL Server 데이터베이스에서 클래스를 스캐폴딩하겠습니다.

 

PS E:\sampleSource\aspnetcore\ef-demo> dotnet ef dbcontext scaffold "TrustServerCertificate=True;Password=pwd!@#123;User ID=uid;Initial Catalog=Employee;Data Source=127.0.0.1" Microsoft.EntityframeworkCore.SqlServer -o Models --project ef-demo.csproj

 

 

 

Entity Framework Core – Database first

 

https://www.jenx.si/2020/04/24/entity-framework-core-database-first/

 

Entity Framework Core – Database first – jenx.si

Entity Framework (EF) Core is a lightweight, extensible, open source and cross-platform version of Entity Framework data access technology. It’s rewritten version of Entity Framework Object-Relation-Mapper for .NET Core. It’s under .NET Foundation , ho

www.jenx.si

 

 

 

 

Create an EF Core Model from Database First (Scaffold DB Context)

 

https://www.youtube.com/watch?v=SrEjoJ_G6tc

 

 


 

 

활용해 보자.

 

 

1. ASP.NET Core 웹앱(Model-View-Controller)" 템플릿 생성

PS E:\sampleSource\aspnetcore\ef-demo> dotnet new mvc -n EfDemoApp

 

 

2. Microsoft.EntityFrameworkCore.Design 설치하기

PS E:\sampleSource\aspnetcore\EfDemoApp> dotnet add EfDemoApp.csproj package Microsoft.EntityFrameworkCore.Design

 

 

3. Microsoft.EntityFrameworkCore.SqlServer 설치하기

 

PS E:\sampleSource\aspnetcore\EfDemoApp> dotnet add EfDemoApp.csproj package Microsoft.EntityFrameworkCore.SqlServer

 

 

4. scaffold 를 활용하여 EF DataBase First 로 설치하기. 

PS E:\sampleSource\aspnetcore\EfDemoApp>  dotnet ef dbcontext scaffold "TrustServerCertificate=True;Password=Eogkrsodlf!@#_InTra;User ID=dbid_intrauniv_gw;Initial Catalog=DB_INTRAUnivGW;Data Source=127.0.0.1,20513" Microsoft.EntityframeworkCore.SqlServer -o Models --project EfDemoApp.csproj

 

 

5. dotnet-aspnet-codegenerator 툴 설치와  Microsoft.VisualStudio.Web.CodeGeneration.Design 패키지 설치

PS E:\sampleSource\aspnetcore\EfDemoApp> dotnet tool install -g dotnet-aspnet-codegenerator
PS E:\sampleSource\aspnetcore\EfDemoApp> dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design

 

 

6. Microsoft.EntityFrameworkCore.Tools 패키지 설치

PS E:\sampleSource\aspnetcore\EfDemoApp> dotnet add package Microsoft.EntityFrameworkCore.Tools

 

 

7. aspnet-codegenerator 사용하여 controller, model, view 를 생성하기

 

  • dotnet aspnet-codegenerator controller: .NET Core의 ASP.NET 스캐폴딩 도구를 사용하여 컨트롤러를 생성합니다.
  • -name AspNetUsersController: 생성할 컨트롤러의 이름을 AspNetUsersController로 지정합니다.
  • -m AspNetUser: AspNetUser 모델을 기반으로 CRUD (생성, 읽기, 업데이트, 삭제) 기능을 가진 컨트롤러와 뷰를 생성합니다.
  • -dc DbIntraunivGwContext: 데이터베이스 컨텍스트 클래스로 DbIntraunivGwContext를 사용합니다. 이 컨텍스트는 데이터베이스와의 상호작용을 관리합니다.
  • --relativeFolderPath Controllers: 생성된 컨트롤러 파일을 Controllers 폴더에 저장합니다.
  • --useDefaultLayout: 기본 레이아웃 파일을 사용하여 생성된 뷰가 일관된 스타일을 가지도록 합니다. 기본 레이아웃 파일은 주로 Views/Shared/_Layout.cshtml에 있습니다.
  • --referenceScriptLibraries: 생성된 뷰가 JavaScript 라이브러리 (예: jQuery, Bootstrap 등)를 참조하도록 설정합니다. 이 옵션은 생성된 뷰 파일에 필요한 스크립트 참조를 추가합니다.

 

PS E:\sampleSource\aspnetcore\EfDemoApp> dotnet aspnet-codegenerator controller -name AspNetUsersController -m AspNetUser -dc DbIntraunivGwContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries

 

 

이 명령어를 실행하면, AspNetUser 모델을 기반으로 기본적인 CRUD 기능을 수행할 수 있는 컨트롤러 (AspNetUsersController)와 관련된 뷰 파일들이 자동으로 생성됩니다. 이는 개발자가 수작업으로 코드를 작성하는 시간을 절약하고, 표준화된 코드를 빠르게 생성하는 데 유용합니다.

 

 

 

8. appsettings.json : ConnectionStrings 넣기

 

{
    "Logging": {
        "LogLevel": {
            "Default": "Information",
            "Microsoft.AspNetCore": "Warning"
        }
    },
    "AllowedHosts": "*",
    "ConnectionStrings": {
        "DefaultConnection": "TrustServerCertificate=True;Password=Pwd123;User ID=sa;Initial Catalog=DBInsa;Data Source=127.0.0.1"
    }
}

 

 

9. programe.cs : AddDbContext 추가하기

using Microsoft.EntityFrameworkCore;
using EfDemoApp.Models;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();

// Configure DbContext
builder.Services.AddDbContext<DbIntraunivGwContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

var app = builder.Build();

// 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();

 

 


 

 

visual studio 내부에서 아래와 같이 실행도 가능하다.

 

Scaffold-DbContext -Connection "TrustServerCertificate=True;Password=pwd!@3;User ID=sa;Initial Catalog=dbname;Data Source=127.0.0.1" -Provider Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Context IdentityDbContext

 

 

 

위 명령어는 Entity Framework Core를 사용하여 기존 데이터베이스로부터 모델 클래스와 DbContext 클래스를 자동으로 생성하는 데 사용됩니다. 이를 쉽게 설명하면 다음과 같습니다:

  • Scaffold-DbContext: Entity Framework Core의 명령어로, 기존 데이터베이스의 구조를 기반으로 코드(모델 및 컨텍스트)를 자동으로 생성합니다.
  • -Connection "TrustServerCertificate=True;Password=xxxxx;User ID=xxxx;Initial Catalog=xxxx;Data Source=127.0.0.1":
    • 데이터베이스에 연결하기 위한 연결 문자열입니다. 이 문자열은 데이터베이스 서버, 데이터베이스 이름, 사용자 이름, 비밀번호 등의 정보를 포함합니다.
    • TrustServerCertificate=True: 서버 인증서를 신뢰하도록 설정합니다.
    • Password=xxxxxx: 데이터베이스에 접근하기 위한 암호입니다.
    • User ID=xxxxx: 데이터베이스 사용자 이름입니다.
    • Initial Catalog=xxxxx: 데이터베이스 이름입니다.
    • Data Source=127.0.0.1: 데이터베이스 서버의 주소와 포트 번호입니다.
  • -Provider Microsoft.EntityFrameworkCore.SqlServer: 사용 중인 데이터베이스 제공자를 지정합니다. 이 경우 SQL Server를 사용합니다.
  • -OutputDir Models: 생성된 모델 클래스와 컨텍스트 클래스를 저장할 디렉터리를 지정합니다. 여기서는 Models 폴더에 저장됩니다.
  • -Context IdentityDbContext: 생성될 DbContext 클래스의 이름을 지정합니다. 여기서는 IdentityDbContext라는 이름으로 생성됩니다.