contract@chaoreumsoft.co.kr |    031-921-0523

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 스키마에 모든 데이터베이스 개체를 만듭니다.

5185dc52323a9e3c66b1ecfe43e64a54_1651294981_0665.png
 


Table

EF Core는 속성과 이름이 같은 컨텍스트 클래스의 모든 DbSet<TEntity> 속성에 대한 데이터베이스 테이블을 만듭니다. 

또한 DbSet 속성으로 포함되지 않지만 다른 DbSet 엔터티의 참조 속성을 통해 연결할 수 있는 엔터티에 대한 테이블을 만듭니다. 

위의 예에서 EF Core는 SchoolContext 클래스의 DbSet<Student> 속성에 대한 Students 테이블과 Student 엔터티 클래스의 Grade 속성에 대한 Grade 테이블을 생성합니다. 이는 SchoolContext 클래스에 DbSet<Grade> 속성이 포함되어 있지 않더라도.

5185dc52323a9e3c66b1ecfe43e64a54_1651295081_8431.png
 

Column

EF Core는 기본적으로 속성과 이름이 같은 엔터티 클래스의 모든 스칼라 속성에 대한 열을 만듭니다.

데이터베이스의 해당 테이블 간의 관계를 구축하는 데 참조 및 컬렉션 속성을 사용 합니다.

5185dc52323a9e3c66b1ecfe43e64a54_1651295145_7646.png
 

Column Data Type

데이터베이스 테이블의 열에 대한 데이터 형식은 데이터베이스 공급자가 C# 데이터 형식을 선택한 데이터베이스의 데이터 형식에 매핑한 방법에 따라 다릅니다. 다음 표에는 C# 데이터 형식과 SQL Server 열 데이터 형식 간의 매핑이 나와 있습니다.


C# Data TypeMapping to SQL Server Data Type
intint
stringnvarchar(Max)
decimaldecimal(18,2)
floatreal
byte[]varbinary(Max)
datetimedatetime
boolbit
bytetinyint
shortsmallint
longbigint
doublefloat
charNo mapping
sbyteNo mapping (throws exception)
objectNo mapping

Nullable Column

EF Core는 모든 참조 데이터 형식 및 nullable 기본 형식 속성에 대해 null 열을 만듭니다.(string, Nullable<int>, decimal?)


NotNull Column

EF Core는 모든 기본 키 속성 및 기본 유형 속성(예: int, float, decimal, DateTime 등)


Primary Key

EF Core는 Id 또는 <Entity Class Name>Id(대소문자 구분 안 함)라는 속성에 대한 기본 키 열을 만듭니다. 

예를 들어 EF Core는 학생 클래스에 id, ID, iD, Id, studentid, StudentId, STUDENTID 또는 sTUdentID라는 속성이 포함된 경우 Students 테이블에 PrimaryKey로 열을 만듭니다.

5185dc52323a9e3c66b1ecfe43e64a54_1651295431_3357.png
 

Foreign Key

외래 키 규칙에 따라 EF Core API는 다음 명명 패턴 중 하나를 사용 하여 엔터티의 각 참조 탐색 속성에 대한 외래 키 열을 만듭니다.
  • <Reference Navigation Property Name>Id
  • <Reference Navigation Property Name><Principal Primary Key Property Name>

예는 (Student 및 Grade 엔터티)에서 EF Core는 다음 그림과 같이 Students 테이블에 외래 키 열 GradeId를 만듭니다.

5185dc52323a9e3c66b1ecfe43e64a54_1651295533_2283.png
다음 표에는 다양한 참조 속성 이름과 기본 키 속성 이름에 대한 외래 키 열 이름이 나와 있습니다.

Reference Property Name in Dependent EntityForeign Key Property Name in Dependent EntityPrincipal Primary Key Property NameForeign Key Column Name in DB
GradeGradeIdGradeIdGradeId
Grade-GradeIdGradeId
Grade-IdGradeId
CurrentGradeCurrentGradeIdGradeIdCurrentGradeId
CurrentGrade-GradeIdCurrentGradeGradeId
CurrentGrade-IdCurrentGradeId
CurrentGradeGradeIdIdGradeId


Index

EF Core는 기본적으로 Primary key 열에 클러스터 형 인덱스를 만들고 ForeignKey 열에 비 클러스터형 인덱스를 만듭니다.



Tag
Entity Framework Core 사용법, EF Core
© Chaoreumsoft Corp. All rights reserved.