У нас есть базовая таблица ChangeLog и две производные таблицы BillOfQuantitiesChangeLogMap и ProjectChangeLogMap:
CREATE TABLE [Global].[ChangeLogs](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[FieldName] [nvarchar](50) NOT NULL,
[OldValue] [nvarchar](2000) NULL,
[NewValue] [nvarchar](2000) NULL,
...
CREATE TABLE [Projects].[BillOfQuantitiesChangeLogs](
[Id] [bigint] NOT NULL,
[ExtraField] [nvarchar](2000) NULL,
...
CREATE TABLE [Projects].[ProjectChangeLogMap](
[Id] [bigint] NOT NULL,
...
Они добавляются в dbcontext следующим образом:
modelBuilder.Configurations.Add(new ChangeLogMap());
modelBuilder.Configurations.Add(new BillOfQuantitiesChangeLogMap());
modelBuilder.Configurations.Add(new ProjectChangeLogMap());
... которые определены одинаково, например:
public class ChangeLogMap : EntityTypeConfiguration<ChangeLog>
{
public ChangeLogMap()
{
ToTable("ChangeLogs", "Global");
Property(t => t.FieldName)
.IsRequired();
Property(t => t.OldValue);
Property(t => t.NewValue);
}
}
Производная сущность наследуется от базовой сущности:
public class BillOfQuantitiesChangeLog : ChangeLog
{
...
}
Теперь, когда мы сохраняем экземпляр BillOfQuantitiesChangeLog, все работает нормально.
Однако, когда в dbcontext мы добавляем только два отображения, например:
modelBuilder.Configurations.Add(new ChangeLogMap());
modelBuilder.Configurations.Add(new BillOfQuantitiesChangeLogMap());
... затем сохранение BillOfQuantitiesChangeLog приводит к сообщению об ошибке, что «ExtraField» не может быть найден. Поэтому я предполагаю, что он пытается сопоставить BillOfQuantitiesChangeLog с одной таблицей, а не с двумя таблицами.
Мой вопрос: почему EF не применяет TPT, если мы добавляем только одно отображение производного класса в контекст?