WEB - PHP, JQuery, Bootstrap

Entity Framework 필드 유형별 DB컬럼 매핑

초심으로 2024. 7. 11. 16:31

728x90

ASP.NET Core의 Entity Framework (EF)에서 다양한 필드 유형을 데이터베이스로 마이그레이션할 때, 각 필드 유형은 데이터베이스에서 특정 컬럼 속성으로 매핑됩니다. 다음은 다양한 데이터 유형과 그에 대응하는 데이터베이스 컬럼 속성에 대한 설명과 예시입니다.

1. 정수형 (Integer Types)

  • int
    • 데이터베이스 타입: int
    • Null 허용 여부: 기본적으로 NOT NULL
  • public int Age { get; set; }
  • int?
    • 데이터베이스 타입: int
    • Null 허용 여부: NULL
  • public int? Age { get; set; }
  • 다른 정수형 (short, long, byte 등)
    • short: smallint
    • long: bigint
    • byte: tinyint
    • Null 허용 여부: 기본적으로 NOT NULL (nullable로 정의하면 NULL)
  • public short ShortNumber { get; set; } public long LongNumber { get; set; } public byte ByteNumber { get; set; }

2. 부동 소수점형 (Floating Point Types)

  • float
    • 데이터베이스 타입: real
    • Null 허용 여부: 기본적으로 NOT NULL
  • public float Price { get; set; }
  • double
    • 데이터베이스 타입: float
    • Null 허용 여부: 기본적으로 NOT NULL
  • public double Price { get; set; }
  • decimal
    • 데이터베이스 타입: decimal(18, 2) (기본 값)
    • Null 허용 여부: 기본적으로 NOT NULL
    • 소수점 이하 자릿수와 정밀도는 애노테이션이나 Fluent API로 설정 가능
  • public decimal Amount { get; set; }

3. 날짜 및 시간형 (Date and Time Types)

  • DateTime
    • 데이터베이스 타입: datetime2
    • Null 허용 여부: 기본적으로 NOT NULL
  • public DateTime DateOfBirth { get; set; }
  • DateTime?
    • 데이터베이스 타입: datetime2
    • Null 허용 여부: NULL
  • public DateTime? DateOfBirth { get; set; }
  • TimeSpan
    • 데이터베이스 타입: time
    • Null 허용 여부: 기본적으로 NOT NULL
  • public TimeSpan Duration { get; set; }

4. 부울형 (Boolean Type)

  • bool
    • 데이터베이스 타입: bit
    • Null 허용 여부: 기본적으로 NOT NULL
  • public bool IsActive { get; set; }
  • bool?
    • 데이터베이스 타입: bit
    • Null 허용 여부: NULL
  • public bool? IsActive { get; set; }

5. 열거형 (Enum Type)

  • Enum
    public enum Status { Active, Inactive, Pending }
    public Status CurrentStatus { get; set; }
    • 데이터베이스 타입: int (기본적으로 열거형의 정수 값이 저장됨)
    • Null 허용 여부: 기본적으로 NOT NULL
    • 문자열로 저장하고 싶다면 ValueConverter를 사용하여 설정 가능
반응형

6. GUID

  • Guid
    • 데이터베이스 타입: uniqueidentifier
    • Null 허용 여부: 기본적으로 NOT NULL
  • public Guid UniqueId { get; set; }
  • Guid?
    • 데이터베이스 타입: uniqueidentifier
    • Null 허용 여부: NULL
  • public Guid? UniqueId { get; set; }

7. 바이너리 데이터 (Binary Data)

  • byte[]
    public byte[] Data { get; set; }
    • 데이터베이스 타입: varbinary(MAX)
    • Null 허용 여부: 기본적으로 NULL

전체 예시 모델 클래스 및 마이그레이션

다음은 다양한 속성을 사용하는 예시 모델 클래스와 해당 마이그레이션 코드입니다.

public class ExampleEntity
{
    public int Id { get; set; }

    [MaxLength(50)]
    public string Name { get; set; } // nvarchar(50) NOT NULL

    [Unicode(false)]
    [MaxLength(100)]
    public string Email { get; set; } // varchar(100) NOT NULL

    [MaxLength(10)]
    [FixedLength]
    public string Code { get; set; } // nchar(10) NOT NULL

    public string? Description { get; set; } // nvarchar(MAX) NULL

    public int Age { get; set; } // int NOT NULL

    public float Price { get; set; } // real NOT NULL

    public decimal Amount { get; set; } // decimal(18, 2) NOT NULL

    public DateTime DateOfBirth { get; set; } // datetime2 NOT NULL

    public TimeSpan Duration { get; set; } // time NOT NULL

    public bool IsActive { get; set; } // bit NOT NULL

    public Guid UniqueId { get; set; } // uniqueidentifier NOT NULL

    public byte[] Data { get; set; } // varbinary(MAX) NULL
}
protected override void Up(MigrationBuilder migrationBuilder)
{
    migrationBuilder.CreateTable(
        name: "ExampleEntities",
        columns: table => new
        {
            Id = table.Column<int>(nullable: false)
                .Annotation("SqlServer:Identity", "1, 1"),
            Name = table.Column<string>(maxLength: 50, nullable: false),
            Email = table.Column<string>(type: "varchar(100)", maxLength: 100, nullable: false),
            Code = table.Column<string>(type: "nchar(10)", maxLength: 10, nullable: false),
            Description = table.Column<string>(nullable: true),
            Age = table.Column<int>(nullable: false),
            Price = table.Column<float>(nullable: false),
            Amount = table.Column<decimal>(type: "decimal(18, 2)", nullable: false),
            DateOfBirth = table.Column<DateTime>(nullable: false),
            Duration = table.Column<TimeSpan>(nullable: false),
            IsActive = table.Column<bool>(nullable: false),
            UniqueId = table.Column<Guid>(nullable: false),
            Data = table.Column<byte[]>(nullable: true)
        },
        constraints: table =>
        {
            table.PrimaryKey("PK_ExampleEntities", x => x.Id);
        });
}

데이터베이스에서 생성된 테이블

CREATE TABLE [dbo].[ExampleEntities] (
    [Id]          INT            IDENTITY (1, 1) NOT NULL,
    [Name]        NVARCHAR (50)  NOT NULL,
    [Email]       VARCHAR (100)  NOT NULL,
    [Code]        NCHAR (10)     NOT NULL,
    [Description] NVARCHAR (MAX) NULL,
    [Age]         INT            NOT NULL,
    [Price]       REAL           NOT NULL,
    [Amount]      DECIMAL (18, 2) NOT NULL,
    [DateOfBirth] DATETIME2      NOT NULL,
    [Duration]    TIME           NOT NULL,
    [IsActive]    BIT            NOT NULL,
    [UniqueId]    UNIQUEIDENTIFIER NOT NULL,
    [Data]        VARBINARY (MAX) NULL,
    CONSTRAINT [PK_ExampleEntities] PRIMARY KEY CLUSTERED ([Id] ASC)
);

위의 예시들을 통해 다양한 필드 유형을 EF Core에서 정의하고 데이터베이스로 마이그레이션할 때 생성되는 컬럼 속성을 살펴보았습니다. 이를 통해 데이터베이스 스키마를 더욱 세밀하게 구성할 수 있습니다.

반응형