이 문서는 https://www.entityframeworktutorial.net/basics/context-class-in-entity-framework.aspx의 발췌 번역입니다.
Entity Framework의 컨텍스트 클래스 는 EF 6 및 EF Core 의 System.Data.Entity.DbContextDbContext 에서 파생된 클래스이다. 컨텍스트 클래스의 인스턴스는 일과 저장소 패턴의 단위를 대표한다. 하나의 데이터베이스 트랜젝션으로 여러가지 변화를 묶을 수 있다.
컨텍스트 클래스는 데이터베이스에 데이터를 저장하거나 쿼리할 때 쓰인다. 또한 도메인 클래스, 데이터베이스 매핑, 변경 트래킹 세팅, 캐싱, 트랜젝션 등등에도 쓰인다.
아래 SchoolContext
클래스가 컨텍스트 클래스 예시이다. DbContext
를 상속받고 있다.
using System.Data.Entity;
public class SchoolContext : DbContext
{
public SchoolContext()
{
}
// Entities
public DbSet<Student> Students { get; set; }
public DbSet<StudentAddress> StudentAddresses { get; set; }
public DbSet<Grade> Grades { get; set; }
}
엔티티 프레임워크에서 엔티티란 데이터베이스 테이블에 매핑되는 클래스이다. 이 클래스는 DbContext
클래스의 DbSet<TEntity>
타입 프로퍼티에 포함되어야 한다. EF API는 각 엔티티를 테이블로, 각 엔티티의 프로퍼티를 데이터베이스의 column으로 매핑한다.
예시: Student
, Grade
가 school 어플리케이션의 도메인 클래스이다.
public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
public DateTime? DateOfBirth { get; set; }
public byte[] Photo { get; set; }
public decimal Height { get; set; }
public float Weight { get; set; }
public Grade Grade { get; set; }
}
public class Grade
{
public int GradeId { get; set; }
public string GradeName { get; set; }
public string Section { get; set; }
public ICollection<Student> Students { get; set; }
}
위 클래스는 컨텍스트 클래스(DbContext
를 상속하는)의 DbSet<TEntity>
프로퍼티로 포함 되어야 엔티티가 된다.
엔티티의 종류 - Scalar properties and Navigation Properties
원시 타입 프로퍼티를 스칼라 프로퍼티라고 한다. 각 스칼라 프로퍼니는 실제 데이터가 저장된 데이터베이스 테이블의 열 값으로 매핑된다.
네비게이션 프로퍼티는 다른 엔티티와의 관계를 나타낸다. 네비게이션 프로퍼티에도 2종류가 있다.
어떤 엔티티가 다른 엔티티 타입을 포함하고 있을 때, 이를 Reference Navigation Property 라 한다. 이는 단일 엔티티를 가리키고 It points to a single entity and represents multiplicity of one (1) in the entity relationships.
EF API가 네비게이션 프로퍼티에 대해 외래키 열을 생성한다. 이는 해당 데이터베이스의 다른 테이블의 PK를 가리키고 있다.
어떤 엔티티가 엔티티 타입의 제네릭 컬렉션 값을 포함할 때, 이를 collection navigation property라 한다. It represents multiplicity of many (*).