위에 엔티티 프레임 워크 TPH : 계정, IndividualAccount 및 의사는 :이 문제는 3 개 클래스 주위에 설명한다 TPT
- 먼저 두 개의 클래스가 추상적
- IndividualAccount있는 계정의 서브 클래스
- 의사는 IndividualAccount의 하위 클래스입니다.
상속의 첫 번째 계층 (Account와 IndividualAccount 사이)은 유형별 테이블 방법으로 구현됩니다. 두 번째 상속 계층 (IndividualAccount와 Doctor 사이)은 계층 구조별 테이블 방법론을 사용합니다.
class AccountConfiguration : EntityTypeConfiguration<Account>
public AccountConfiguration()
{
HasKey(x => x.Id);
...
}
}
class IndividualAccountConfiguration : EntityTypeConfiguration<IndividualAccount>
{
public IndividualAccountConfiguration()
{
ToTable("IndividualAccounts");
...
}
}
class DoctorConfiguration : EntityTypeConfiguration<Doctor>
{
public DoctorConfiguration()
{
...
}
}
우리가이 구성에서 기대하는 두 개의 테이블을 가지고있다 :
유창함 API 구성
은 다음과 같습니다 첫 번째는 모든 사용자 ID와 일반 속성을 저장 (예 : 사용자 이름 및 암호) 두 번째 것은 모든 개인 (예 : 이름과 전화 번호)에 공통된 속성을 저장합니다. 또한 두 번째 표에는 의사와 다른 유형의 개인을 구별하는 판별 자 필드가 있습니다.이드가 닥터를 구하려고하면 문제가 발생합니다. .
잘못된 열 이름 '차별'\ 연구 \ n은 놀랍게도
나는 "(표를 배치하면 : 예외가 많은 열이 그 중 가장 중요한 하나가되고, 무효임을 주장 발생합니다 IndividualAccounts ")] 위의 IndividualAccount 클래스 정의, 문제가 해결됩니다. 하지만 이미 구성 (Fluent API)에서 테이블 이름을 설정했습니다. Fluent API 외에도 특수 효과를 사용해야하는 이유는 무엇입니까?
업데이트 주석의 존재에
는, 의사의 속성은 참으로 우리가 기대했던 것입니다 IndividualAccounts 테이블에 배치됩니다. 그러나 주석을 제거하면 해당 필드를 기본 테이블로 이동하려는 새로운 마이그레이션이 생성됩니다 계정!
답변 해 주셔서 감사합니다. 필자가 원하는대로 구성되지 않은 테이블에 관해서는 다시 점검하고 위에서 설명한대로 IndividualAccounts 테이블에 Discriminator 열이 포함되어 있고 전체 응용 프로그램이 올바르게 작동합니다. 더 간단한 디자인에 관해서, 우리는 많은 대안을 생각해 왔으며 이것은 우리 요구 사항에 더 적합했습니다. – mdoust
@mdoust 게시자의 클래스와 DbContext 및 전체 DbConfigurations를 알려주십시오. 누락되었습니다. 귀하의 설명으로 엔티티를 작성했지만 나에 의해 Discriminator 열이 누락되었습니다! –