См. Класс ниже:
public class UndergraduateEntityTypeConfiguration : IEntityTypeConfiguration<Undergraduate>
{
public void Configure(EntityTypeBuilder<Barclaycard> undergraduateConfiguration)
{
undergraduateConfiguration.HasData(
new Undergraduate(1, "Undergraduate")
);
}
}
и код ниже:
public class StudentEntityTypeConfiguration : IEntityTypeConfiguration<Student>
{
public void Configure(EntityTypeBuilder<CreditCard> studentConfiguration)
{
studentonfiguration.ToTable("Student", StudentContext.DEFAULT_SCHEMA);
studentConfiguration.HasKey(o => o.Id);
studentConfiguration.Property(o => o.Id)
.ForSqlServerUseSequenceHiLo("studentseq", StudentContext.DEFAULT_SCHEMA);
studentConfiguration.HasDiscriminator<string>("Type")
.HasValue<Graduate>("Graduate")
.HasValue<Vanquis>("Undergraduate");
}
}
Обратите внимание, что в поле идентификатора студента (в таблице ученика) используется последовательность HiLo.Однако в UndergraduateEntityTypeConfiguration я должен явно передать идентификационный номер в конструктор Undergraduate, чтобы добавить запись Undergraduate в таблицу Student.
Код работает должным образом.Тем не менее, я не понимаю, почему я должен пройти идентификацию (1) самостоятельно.Есть ли способ создания записи бакалавриата, как это:
undergraduateConfiguration.HasData(
new Undergraduate("Undergraduate")
);
Обратите внимание, что на этот раз ID не передается в конструктор.Если я делаю это, то вижу ошибку, которая говорит: «Начальный объект для типа объекта« Бакалавриат »не может быть добавлен, потому что для требуемого свойства« Id »не было предоставлено значение».