Я пытаюсь настроить наследование TPC с помощью Code First для моделирования входящих и исходящих сообщений и записей в них.
Базовый тип, SentRecord, является конкретным, а его производный тип, ReceivedRecord, также является конкретным и наследуется от SentRecord и добавляет несколько дополнительных полей для записи кодов возврата. Как то так, но с большим количеством свойств:
public class SentRecord : RecordBase {
public int Id { get; set; }
public string FooField { get; set; }
}
public class ReceivedRecord : SentRecord {
public int ReturnCode { get; set; }
public SentRecord SentRecord { get; set; }
}
Текущая модель - TPH, и в результате таблицы получают столбец дескриптора, чтобы определить тип объекта, который был сохранен. Это работает, но я бы предпочел, чтобы оба объекта хранились в отдельных таблицах без необходимости в столбце дискриминатора. Таблица SentRecord будет иметь только столбцы Id и FooField, а таблица ReceivedRecord будет иметь Id, FooField, ReturnCode и FK для SentRecord.
В настоящее время в моем классе DataContext есть следующее:
public class Context : DContext {
public DbSet<SentRecord> SentRecords { get; set; }
public DbSet<ReceivedRecord> ReceivedRecords { get; set; }
}
И у меня есть следующая конфигурация для ReceivedRecord:
public class ReceivedRecord_Configuration : EntityTypeConfiguration<ReceivedRecord>{
public ReceivedRecord_Configuration() {
this.Map(m => {
m.MapInheritedProperties();
m.ToTable("ReceivedRecords");
});
}
}
И следующее для SentRecord:
public class SentRecord_Configuration : EntityTypeConfiguration<SentRecord>{
public SentRecord_Configuration() {
this.Map(m => {
m.MapInheritedProperties(); //In order to map the properties declared in RecordBase
m.ToTable("SentRecords");
});
}
}
Но когда я запускаю это, я получаю следующую ошибку, когда EF пытается инициализировать мою базу данных:
Problem in mapping fragments starting at lines 455, 1284:
An entity from one EntitySet is mapped to a row that is also mapped to an entity from another EntitySet with possibly different key.
Ensure these two mapping fragments do not map two unrelated EntitySets to two overlapping groups of rows.
Я не уверен, что делать, чтобы настроить это так, как я описал выше в TPC? Или я должен придерживаться TPH, который работает?
Заранее спасибо!