이것은 this question의 확장이며 이제는 EF6에서 작동합니다. 그러나 공유 및 비공유 속성을 모두 가진 하위 클래스가있을 때 문제가있는 것처럼 보입니다. 공유 테이블과 비공유 열 모두를 사용하는 계층 구조 테이블 매핑
이의이 내 모델 설정되어 있다고 가정 해 봅시다 : 데이터베이스에서public abstract class Document
{
public int Id { get; set; }
public string NameOnDocument { get; set; }
}
public class BirthCertificate : Document
{
public string RegistrationNumber { get; set; }
}
public class Licence : Document
{
public string LicenceNumber { get; set; }
}
, 나는 동일한 열, Number
를 공유 할 수 BirthCertificate.RegistrationNumber
및 Licence.LicenceNumber
를 원한다. 나는 데이터베이스를 생성 할 때 그 모든 모습을
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Document - base class
modelBuilder.Entity<Document>().HasKey(d => d.Id);
modelBuilder.Entity<Document>()
.Property(d => d.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<Document>()
.Property(d => d.NameOnDocument)
.HasColumnName("Name");
// Birth certificate
modelBuilder.Entity<Document>().Map<BirthCertificate>(map =>
map.Property(c => c.RegistrationNumber).HasColumnName("Number"));
// Licence
modelBuilder.Entity<Document>().Map<Licence>(map =>
map.Property(l => l.LicenceNumber).HasColumnName("Number"));
}
을 예상대로 작동합니다 : 따라서,이 같은 내 모델을 설정하고있어
을 이제 손에서 문제에 대한. Licence
엔티티도 만료 날짜를 기록해야한다고 가정 해 보겠습니다. 내가 같이가 다음 것을 추가 : 나는 데이터베이스를 다시 생성 할 때
public class Licence : Document
{
public string LicenceNumber { get; set; }
public DateTime ExpiryDate { get; set; }
}
는 지금, 그것은 다음과 같습니다 무엇
더, 나는 라이센스 및 출생 증명서를 삽입하려고하면
유형 'System.Data.Entity.Infrastructure.DbUpdateException'의 처리되지 않은 예외가 EntityFramework.dll
012에서 발생, 나는 다음과 같은 예외가추가 정보 : 엔티티 또는 연결에서 공유되는 값은 둘 이상의 위치에서 생성됩니다. 매핑이 EntityKey를 여러 저장소 생성 열로 분할하지 않는지 확인하십시오.
데이터베이스가 쓸모 없기 때문에 예외가 발생하는 이유를 알 수 있습니다.
내가 무엇을 놓쳤는가?
하는 각 주에 대한 5 개의 공통 속성과 소수의 반 공통 속성. 모든 서류에 번호가있는 것은 아닙니다. 생각해 줘서 고마워. – gerrod
@gerrod가 "semi-common"속성에 상속을 사용하는 방법을 보여주기 위해 편집했습니다. – Colin
Thanks; 그러나 그것은 여전히 너무 단순합니다 :-). 공통 속성과 함께 사용하면 내 테이블에는 PropertyA, PropertyB ... PropertyG 등 7 개의 공유 속성이 있습니다. Document1에는 PropertyA, PropertyC가 있습니다. Document2에는 PropertyC, PropertyE, PropertyF가 있습니다. Document3에는 PropertyB, PropertyE, PropertyG가 있습니다. 기타 등 서로 다른 6 가지 문서 유형으로 각각 공유 속성의 조합이 다릅니다. – gerrod