재우니의 블로그

 

Reverse Engineer a SQL-Server database with EF Power Tools

Note
EF Power tool 은 EF Core 5 지원하지 않으며, EF Core 6 and EF Core 7, EF Core 8 을 지원한다. 

 

 

이 글에서는 SSMS(SQL-Server Management Studio)에서 세 개의 테이블을 포함한 데이터베이스를 만드는 방법을 배우고, 이어서 새로운 데이터베이스의 테이블을 나타내는 POCO 클래스를 만들 것입니다.

POCO 클래스가 EF Power Tools를 사용하여 생성된 후, 몇 가지 쿼리를 작성할 것입니다.

Microsoft Visual Studio 2022 이상 및 Microsoft SSMS가 필요합니다.

 

Create the database

  1. SSMS를 엽니다. (localdb)\MSSQLLocalDB에 연결을 엽니다.
  2. Object Explorer에서 Databases를 마우스 오른쪽 버튼으로 클릭합니다.
  3. New database를 선택합니다.
  4. 데이터베이스 이름으로 NorthWindContacts를 입력하고, OK를 클릭합니다.
  5. NorthWindContacts를 마우스 오른쪽 버튼으로 클릭하고, New query를 선택합니다.
  6. NorthWindContacts.sql을 열고, 내용을 복사합니다. SSMS로 돌아가서, 새 쿼리에 내용을 붙여넣습니다.
  7. Execute를 클릭합니다.
  8. NorthWindContacts를 마우스 오른쪽 버튼으로 클릭하고, 새로고침하면 세 개의 테이블이 보일겁니다.

 

 

Install EF Core Power Tools

  1. Visual Studio를 닫은 후, 다음 링크에서 EF Power Tools를 다운로드합니다.
  2. 다운로드한 파일을 더블 클릭하고, 나타나는 안내에 따릅니다.

 

 

Open Visual Studio to this solution

  1. 솔루션 탐색기의 최상위 노드에서 마우스 오른쪽 버튼을 클릭합니다.
  2. "콘솔 프로젝트 생성"을 선택하고, "top down statements 사용 안 함"을 확인하며 NorthWindContactsApp으로 프로젝트 이름을 지정합니다.
  3. 솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고, "NuGet 패키지 관리"를 선택합니다. "브라우즈" 탭에서 Microsoft.EntityFrameworkCore.SqlServer를 붙여넣고, "설치"를 클릭하거나 NuGet 명령 프롬프트에서 "Install-Package Microsoft.EntityFrameworkCore.SqlServer --version 7.0.2"를 사용합니다.
  4. 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭합니다.
  5. "EF Power Tools"를 선택합니다. "Reverse Engineer"를 선택합니다.
  6. 새 데이터베이스 연결을 구성합니다 (그림 1 참조) 및 EF Core 버전을 선택합니다.
  7. 연결 속성을 설정합니다 (그림 2 참조).
  8. "Accept"를 선택합니다 (그림 3 참조).
  9. 테이블을 선택합니다 (그림 4 참조).
  10. Next, set several settings (see figure 5)
    1. Context name: NorthWindContext
    2. Namespace: NorthWindContactsApp
    3. EntityTypes: Models
    4. DbCotext path: Data
    5. Check Include connection string in generated code (okay for learning but should not be done for a real app)

Figure 1

Figure 2

Figure 3

Figure 4

Figure 5

 

 

 

 

Add another package to the project

Add the NuGet package Spectre.Console to the project

 

 

Write code to get data

 

"Program.cs 파일을 열고 아래 내용으로 대체하세요. 이 내용은 아래 표시된 테이블로 상위 20개의 연락처를 선택할 것입니다."

 

 

using Microsoft.EntityFrameworkCore;
using NorthWindContactsApp.Data;
using Spectre.Console;

namespace NorthWindContactsApp
{
    internal class Program
    {
        static void Main(string[] args)
        {
            using var context = new NorthWindContext();

            var contacts = context.Contacts
                .Include(x => x.ContactTypeIdentifierNavigation)
                .Include(x => x.ContactDevices)
                .Take(20)
                .ToList();


            var table = CreateTable();

            foreach (var contact in contacts)
            {
                if (contact.ContactDevices.Any())
                {
                    table.AddRow(contact.ContactId.ToString(), 
                        contact.FirstName, 
                        contact.LastName, 
                        contact.ContactTypeIdentifierNavigation.ContactTitle, 
                        contact.ContactDevices.FirstOrDefault()!.PhoneNumber);
                }
                else
                {
                    table.AddRow(contact.ContactId.ToString(), 
                        contact.FirstName, 
                        contact.LastName, 
                        contact.ContactTypeIdentifierNavigation.ContactTitle, 
                        "[red](none)[/]");
                }
            }

            AnsiConsole.Write(table);
            Console.ReadLine();
        }
        private static Table CreateTable()
        {
            return new Table()
                .RoundedBorder().BorderColor(Color.LightSlateGrey)
                .AddColumn("[b]Id[/]")
                .AddColumn("[b]First[/]")
                .AddColumn("[b]Last[/]")
                .AddColumn("[b]Title[/]")
                .AddColumn("[b]Phone[/]")
                .Alignment(Justify.Center)
                .Title("[white on blue]Contacts[/]");
        }
    }
}

 

 

프로젝트를 실행하고 아래의 코드가 상위 20개의 연락처를 표시합니다.

 

Connection string

위의 지침에서는 연결 문자열이 DbContext에 하드코딩되어 있습니다. ASP.NET Core에서 작업할 때는 연결 문자열을 appsettings.json 파일의 ConnectionStrings 섹션으로 이동합니다.

그런 다음 다음과 같은 코드를 사용하여 연결 문자열을 가져옵니다. 이 코드는 각 개발자가 다르게 처리할 수 있기 때문에 구성을 표시하지 않습니다. 예를 들어 하드코딩된 경로나 환경 변수를 사용할 수 있습니다.

 

builder.Services.AddDbContextPool<Context>(options =>
    options.UseSqlServer(configuration.GetConnectionString("DefaultConnection")));

 

 

Next steps

  • 코드를 공부하여 작동 방식을 이해하세요.
  • EF Core에 대한 Microsoft 문서를 읽으세요.
  • NorthWindContext.cs에서 연결 문자열을 제거하고 appsettings.json에 넣으세요.
  • ModelCommentsApp 프로젝트를 살펴보면 appsettings.json에 연결 문자열이 있습니다.
  • ConfigurationLibrary NuGet 패키지를 사용하여 BookContext.cs의 OnConfiguring에서 연결 문자열을 설정하며, EF Core 작업을 기록할지 여부를 나타내는 여러 옵션이 있음을 확인하세요.

 

참고: 위 단계에서는 데이터베이스 연결 문자열을 DDbContext에 기본으로 설정했습니다. appsettings.json과 같은 구성 파일에 연결 문자열을 넣는 방법을 학습하는 데 시간을 투자하세요. 이 부분은 EF Power Tools 사용 방법에 중점을 두었기 때문에 다루지 않았습니다.

 

 

 

https://dev.to/karenpayneoregon/ef-power-tools-tutorial-44d8

 

EF Power Tools tutorial

Reverse Engineer a SQL-Server database with EF Power Tools Note Before starting, EF...

dev.to

 

Learn more about EF Power Tools

📖 See Erikj's Wiki

You also might like

Working with Console projects