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에서 정의하고 데이터베이스로 마이그레이션할 때 생성되는 컬럼 속성을 살펴보았습니다. 이를 통해 데이터베이스 스키마를 더욱 세밀하게 구성할 수 있습니다.
반응형
'WEB - PHP, JQuery, Bootstrap' 카테고리의 다른 글
.NET Core에서 MemoryCache를 활용한 Backend 캐시 구현 가이드 (2) | 2024.09.13 |
---|---|
A4 용지 출력에 맞춘 CSS 설정 (76) | 2024.07.26 |
PHP 프로그래밍 시 주의해야 하는 보안 코드 (1) | 2024.07.03 |
모바일 웹 - 가로화면/세로화면 인식 및 처리 방법 3가지 (0) | 2021.12.29 |
[CSS] 열 틀고정 + 행 틀고정 - 공대여자 버전 (2) | 2021.12.21 |