Entity Framework
EntityFramework를 사용한 상속 (코드 우선)
수색…
계층 당 테이블
이 방법은 모든 상속 구조를 나타 내기 위해 데이터베이스에 하나의 테이블을 생성합니다.
예:
public abstract class Person
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime BirthDate { get; set; }
}
public class Employee : Person
{
public DateTime AdmissionDate { get; set; }
public string JobDescription { get; set; }
}
public class Customer : Person
{
public DateTime LastPurchaseDate { get; set; }
public int TotalVisits { get; set; }
}
// On DbContext
public DbSet<Person> People { get; set; }
public DbSet<Employee> Employees { get; set; }
public DbSet<Customer> Customers { get; set; }
생성 된 테이블은 다음과 같습니다.
표 : 사용자 필드 : Id 이름 생년월일 Discrimitator AdmissionDate JobDescription LastPurchaseDate TotalVisits
'Discriminator'가 상속에 대한 하위 클래스의 이름을 보유하고 'AdmissionDate', 'JobDescription', 'LastPurchaseDate', 'TotalVisits'는 null을 허용합니다.
장점
- 데이터베이스가 많은 페이징 작업을 요구할 수 있지만 많은 열에 대해서는 조인이 필요하지 않으므로 성능이 향상됩니다.
- 사용 및 작성이 간단합니다.
- 하위 클래스 및 필드를 쉽게 추가 할 수 있습니다.
단점
유형별 표
이 접근법은 데이터베이스에서 (n + 1) 개의 테이블을 생성하여 모든 상속 구조를 나타냅니다. 여기서 n은 하위 클래스 수입니다.
어떻게:
public abstract class Person
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime BirthDate { get; set; }
}
[Table("Employees")]
public class Employee : Person
{
public DateTime AdmissionDate { get; set; }
public string JobDescription { get; set; }
}
[Table("Customers")]
public class Customer : Person
{
public DateTime LastPurchaseDate { get; set; }
public int TotalVisits { get; set; }
}
// On DbContext
public DbSet<Person> People { get; set; }
public DbSet<Employee> Employees { get; set; }
public DbSet<Customer> Customers { get; set; }
생성 된 테이블은 다음과 같습니다.
표 : 사용자 필드 : ID 이름 생년월일
표 : 직원 필드 : PersonId AdmissionDate JobDescription
표 : 고객 : 필드 : PersonId LastPurchaseDate TotalVisits
모든 테이블의 'PersonId'는 People.Id에 대한 기본 키 및 제약 조건입니다.
장점
- 정규화 된 테이블
- 열과 하위 클래스를 쉽게 추가 할 수 있습니다.
- Null 허용 열 없음
단점
- 데이터를 검색하려면 조인이 필요합니다.
- 하위 클래스 추론이 더 비쌉니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow