VB.NET 쿼리 없이 DB 사용하기 (EntityFrameworkCore) #2/3

2024. 2. 14. 09:59VB.NET/MS-SQL

이번 시간에는 지난번에 언급했던 작업 순서에 따라 차근차근 아주 상세하게 EntityFrameworkCore을 이용해서 MS-SQL을 사용하는 방법에 대해 알아보도록 하자.

 

2024.02.12 - [VB.NET/MS-SQL] - VB.NET 쿼리 없이 DB 사용하기 (EntityFrameworkCore) #1/3

 

VB.NET 쿼리 없이 DB 사용하기 (EntityFrameworkCore) #1/3

항상 ADO를 사용하는게 익숙했는데, 아무래도 MAUI와 같은 멀티플랫폼에서의 호환성을 위해 ADO는 점점 사라지는 추세인듯 하다. 그래서, 다른 대안을 찾다보니 EntityFrameworkCore가 있더라. 이건 하위

chakhani.tistory.com

1. 프로젝트 생성

VS2022 Community로 새 프로젝트를 생성하는데 아래 조건에 맞게 생성해주자.

- Visual Basic Windows Forms 앱

Windows Form 앱

- 프로젝트 이름 : EFCoreExam

프로젝트 이름

- 프레임워크 : .NET 8.0 (장기 지원)

.NET 8.0 (장기 지원)

2. NuGet 패키지

- Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.SqlServer의 두개의 패키지를 설치

Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.SqlServer

- 추가된 패키지는 아래 솔루션 탐색기에서 확인 가능

추가된 패키지 확인

3. DB 생성

  • SSMS(Microsoft SQL Server Management Studio)로 간단하게 테이블을 하나 만들어주자.
  • 테이블명 : user_info
  • 필드 : user_id, user_name, user_score
  • Primary Key : user_id

SSMS에서 테이블 생성

4. DB의 Field와 1:1 매칭이 되는 데이터 전용 클래스 생성

  • 클래스는 Friend로 설정하는게 좋음
  • 반드시 변수명을 필드명과 동일하게 설정해야 함. (대소문자는 관계없음)
  • Primary Key는 <Key> 라고 명시해야 함
  • 필수 필드는 <Required> 라고 명시해야 함
Imports System.ComponentModel.DataAnnotations

Friend Class USER_INFO
    <Key>
    Public Property User_id As String

    <Required>
    Public Property User_name As String

    <Required>
    Public Property User_score As Integer
End Class

5. DB에 연결하기 위한 클래스 생성

Imports Microsoft.EntityFrameworkCore

Friend Structure DB_INFO
   Dim Server, DBName, UserID, Password, Trust As String
End Structure

Friend Class DBConn : Inherits DbContext

    Friend ReadOnly DBInfo As DB_INFO

    Friend Sub New(pDBInfo As DB_INFO)
        DBInfo = pDBInfo
    End Sub

    Friend Property User_info As DbSet(Of USER_INFO)        ' 이게 테이블명과 동일해야 함

    Protected Overrides Sub OnConfiguring(optionsBuilder As DbContextOptionsBuilder)
        Dim lpStr As String = $"Server={DBInfo.Server};Database={DBInfo.DBName};User Id={DBInfo.UserID};Password={DBInfo.Password};"
        lpStr &= $"TrustServerCertificate={DBInfo.Trust};"     ' 서버에 SSL 인증서가 없는 경우 인증서 유효성 검사를 비활성화 시킴
        optionsBuilder.UseSqlServer(lpStr)
        MyBase.OnConfiguring(optionsBuilder)
    End Sub

    ' Protected Overrides Sub OnModelCreating(modelBuilder As ModelBuilder)
    '    modelBuilder.Entity(Of USER_INFO)().HasNoKey()
    ' End Sub

End Class
  • DBInfo : DB 연결 문자열에 들어갈 정보. 서버명, DB명, UserID, PassWord, TrustServerCertificate 정보가 들어있음. 구조체로 선언해서 사용하면 된다.
  • User_info : user_info 테이블의 데이터를 저장하는 컨테이너. 이 변수를 이용해서 테이블을 읽거나 쓴다.
  • OnConfiguring() : DbContext에서 상속받은 함수로 연결문자열을 이용해서 DB에 연결한다.
  • OnModelCreating() : 테이블에 Private Key가 없는 경우 Entity.HasNoKey()를 사용해서 키가 없다는걸 알린다. 여기서는 user_id라는 키가 있으니 필요없는 문장임.

마치며...

이제 이렇게 만들어놓은 DBConn 클래스를 이용해서 DB에 연결후 테이블에 접근해서 Select, Insert와 동일한 쿼리문의 역할을 만들어볼 차례이다.

 

나름 장황하게 설명을 늘어놓은 이유는 기존에 사용하던 방식과는 완전 다른 방식으로 DB에 접근하려다보니 받아들여야 할 새로운 개념이 많기 때문이다.

 

위 문장들이 익숙해질때까지 직접 입력해보고, 사용해 보도록 하자.

실제로 DB를 사용하는 예제는 다음 시간에 이어서 작성하도록 하고, 예제가 완성되면 예제 프로젝트도 업로드 해놓도록 하겠다.

 

2024.02.15 - [VB.NET/MS-SQL] - VB.NET 쿼리 없이 DB 사용하기 (EntityFrameworkCore) #3/3

 

VB.NET 쿼리 없이 DB 사용하기 (EntityFrameworkCore) #3/3

이번 시간에는 지난 시간에 이어서 EntityFrameworkCore을 사용해서 DB의 내용을 가져오고, DB에 내용을 저장하는 기능을 구현해 보도록 하자. 6. DB를 사용하기 위한 클래스 생성 ClassDB 라는 클래스를

chakhani.tistory.com

 

반응형