Entity Framework Core의 규칙
페이지 정보
작성자최고관리자본문
규칙은 Entity Framework가 도메인(엔티티) 클래스를 기반으로 모델을 빌드하는 데 사용하는 기본 규칙 입니다.
첫 번째 EF Core 애플리케이션 장에서 EF Core API는 도메인 클래스가 규칙을 따르고 있기 때문에 추가 구성 없이 도메인 및 컨텍스트 클래스를 기반으로 데이터베이스 스키마를 만듭니다.
기본 규칙을 이해 하려면 다음 샘플 엔터티 및 컨텍스트 클래스를 고려하세요.
public class Student { public int StudentId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTime DateOfBirth { get; set; } public byte[] Photo { get; set; } public decimal Height { get; set; } public float Weight { get; set; } public int GradeId { get; set; } public Grade Grade { get; set; } } public class Grade { public int Id { get; set; } public string GradeName { get; set; } public string Section { get; set; } public IList<Student> Students { get; set; } } public class SchoolContext : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(@"Server=.\SQLEXPRESS;Database=SchoolDB;Trusted_Connection=True;"); } public DbSet<Student> Students { get; set; } }
EF Core 규칙과 EF Core API가 위 엔터티에 대한 데이터베이스를 만드는 방법을 이해해 보겠습니다.
Schema
EF Core는 기본적으로 dbo 스키마에 모든 데이터베이스 개체를 만듭니다.
Table
EF Core는 속성과 이름이 같은 컨텍스트 클래스의 모든 DbSet<TEntity> 속성에 대한 데이터베이스 테이블을 만듭니다.
또한 DbSet 속성으로 포함되지 않지만 다른 DbSet 엔터티의 참조 속성을 통해 연결할 수 있는 엔터티에 대한 테이블을 만듭니다.
위의 예에서 EF Core는 SchoolContext 클래스의 DbSet<Student> 속성에 대한 Students 테이블과 Student 엔터티 클래스의 Grade 속성에 대한 Grade 테이블을 생성합니다. 이는 SchoolContext 클래스에 DbSet<Grade> 속성이 포함되어 있지 않더라도.
Column
EF Core는 기본적으로 속성과 이름이 같은 엔터티 클래스의 모든 스칼라 속성에 대한 열을 만듭니다.
데이터베이스의 해당 테이블 간의 관계를 구축하는 데 참조 및 컬렉션 속성을 사용 합니다.
Column Data Type
데이터베이스 테이블의 열에 대한 데이터 형식은 데이터베이스 공급자가 C# 데이터 형식을 선택한 데이터베이스의 데이터 형식에 매핑한 방법에 따라 다릅니다. 다음 표에는 C# 데이터 형식과 SQL Server 열 데이터 형식 간의 매핑이 나와 있습니다.
C# Data Type | Mapping to SQL Server Data Type |
---|---|
int | int |
string | nvarchar(Max) |
decimal | decimal(18,2) |
float | real |
byte[] | varbinary(Max) |
datetime | datetime |
bool | bit |
byte | tinyint |
short | smallint |
long | bigint |
double | float |
char | No mapping |
sbyte | No mapping (throws exception) |
object | No mapping |
Nullable Column
NotNull Column
Primary Key
EF Core는 Id 또는 <Entity Class Name>Id(대소문자 구분 안 함)라는 속성에 대한 기본 키 열을 만듭니다.
예를 들어 EF Core는 학생 클래스에 id, ID, iD, Id, studentid, StudentId, STUDENTID 또는 sTUdentID라는 속성이 포함된 경우 Students 테이블에 PrimaryKey로 열을 만듭니다.
Foreign Key
<Reference Navigation Property Name>Id
<Reference Navigation Property Name><Principal Primary Key Property Name>
예는 (Student 및 Grade 엔터티)에서 EF Core는 다음 그림과 같이 Students 테이블에 외래 키 열 GradeId를 만듭니다.
다음 표에는 다양한 참조 속성 이름과 기본 키 속성 이름에 대한 외래 키 열 이름이 나와 있습니다.
Reference Property Name in Dependent Entity | Foreign Key Property Name in Dependent Entity | Principal Primary Key Property Name | Foreign Key Column Name in DB |
---|---|---|---|
Grade | GradeId | GradeId | GradeId |
Grade | - | GradeId | GradeId |
Grade | - | Id | GradeId |
CurrentGrade | CurrentGradeId | GradeId | CurrentGradeId |
CurrentGrade | - | GradeId | CurrentGradeGradeId |
CurrentGrade | - | Id | CurrentGradeId |
CurrentGrade | GradeId | Id | GradeId |
Index
EF Core는 기본적으로 Primary key 열에 클러스터 형 인덱스를 만들고 ForeignKey 열에 비 클러스터형 인덱스를 만듭니다.