EF : Entity Framework Core – Database first 사용해 보기
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/
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라는 이름으로 생성됩니다.