VisualAcademy Tenant 모델 및 데이터베이스 스키마 업데이트

  • 2 minutes to read

이 문서는 VisualAcademy 프로젝트에서 TenantModel 클래스를 업데이트하고, 데이터베이스 스키마를 강화하는 방법에 대해 설명합니다.

1. TenantModel 클래스 업데이트

TenantModel 클래스는 여러 속성을 포함합니다. 이번 업데이트에서는 새로운 속성인 PortalNameScreeningPartnerName을 추가합니다.

TenantModel 클래스

using System.ComponentModel.DataAnnotations;

namespace VisualAcademy.Models;

public class TenantModel
{
    public long Id { get; set; }

    [Display(Name = "Connection String")]
    public string? ConnectionString { get; set; }

    [Required]
    [Display(Name = "Name")]
    public string Name { get; set; } = null!;

    [Display(Name = "Authentication Header")]
    public string? AuthenticationHeader { get; set; }

    [Display(Name = "Account ID")]
    public string? AccountID { get; set; }

    [Display(Name = "Global Search Connection String")]
    public string? GSConnectionString { get; set; }

    [Display(Name = "Report Writer URL")]
    public string? ReportWriterURL { get; set; }

    [Display(Name = "Badge Photo Type")]
    public string? BadgePhotoType { get; set; }

    [Display(Name = "Portal Name")]
    public string? PortalName { get; set; }

    [Display(Name = "Screening Partner Name")]
    public string? ScreeningPartnerName { get; set; }
}

2. DefaultSchemaEnhancerAddColumns 클래스를 이용한 데이터베이스 스키마 갱신

데이터베이스 스키마에 PortalNameScreeningPartnerName 컬럼이 존재하지 않는 경우, DefaultSchemaEnhancerAddColumns 클래스를 사용하여 이를 추가할 수 있습니다.

DefaultSchemaEnhancerAddColumns 클래스

using Microsoft.Data.SqlClient;

namespace VisualAcademy.Infrastructures
{
    public class DefaultSchemaEnhancerAddColumns
    {
        private string _defaultConnectionString;

        public DefaultSchemaEnhancerAddColumns(string defaultConnectionString)
        {
            _defaultConnectionString = defaultConnectionString;
        }

        public void EnhanceDefaultDatabase()
        {
            AddColumnIfNotExists("Tenants", "PortalName", "nvarchar(max) NULL DEFAULT ('VisualAcademy')");
            AddColumnIfNotExists("Tenants", "ScreeningPartnerName", "nvarchar(max) NULL DEFAULT ('VisualAcademy')");
        }

        private void AddColumnIfNotExists(string tableName, string columnName, string columnDefinition)
        {
            using (SqlConnection connection = new SqlConnection(_defaultConnectionString))
            {
                connection.Open();

                SqlCommand cmdCheck = new SqlCommand($@"
                    IF NOT EXISTS (
                        SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
                        WHERE TABLE_NAME = @tableName AND COLUMN_NAME = @columnName
                    ) 
                    BEGIN
                        ALTER TABLE dbo.{tableName} ADD {columnName} {columnDefinition};
                    END", connection);

                cmdCheck.Parameters.AddWithValue("@tableName", tableName);
                cmdCheck.Parameters.AddWithValue("@columnName", columnName);

                cmdCheck.ExecuteNonQuery();

                connection.Close();
            }
        }
    }
}

3. Program.cs에서 DefaultSchemaEnhancerAddColumns 클래스 호출

Program.cs 파일에서 DefaultSchemaEnhancerAddColumns 클래스를 생성하고 EnhanceDefaultDatabase 메서드를 호출하여 데이터베이스 스키마를 강화하는 과정을 수행합니다.

Program.cs 코드 예시

try
{
    var schemaEnhancer = new DefaultSchemaEnhancerAddColumns(connectionString);
    schemaEnhancer.EnhanceDefaultDatabase();
}
catch (Exception)
{
    // 예외 처리 로직
}

이 코드는 Program.cs 파일에 데이터베이스 연결 문자열을 이용하여 DefaultSchemaEnhancerAddColumns 인스턴스를 생성하고, EnhanceDefaultDatabase 메서드를 호출하여 필요한 경우 Tenants 테이블에 새로운 컬럼들을 추가합니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com