Для типа объекта "DetailOrder" требуется определить первичный ключ.
(составной) PK должен быть явно определен для всех объектов, где PK не может быть автоматически получен в соответствии с соглашениями об именовании EF Core . В примере используется ПК с именем Id
, поэтому ему не требуется дополнительная настройка.
Правильная конфигурация размещенной модели с разбиением таблицы должна быть такой:
modelBuilder.Entity<DetailedOrder>(entity =>
{
entity.HasBaseType((string)null)
.Ignore(o => o.DetailedOrder);
entity.HasKey(o => new { o.OrderId, o.Rev }); // <--
entity.ToTable("Orders");
});
modelBuilder.Entity<Order>(entity =>
{
entity.HasKey(o => new { o.OrderId, o.Rev }); // <--
entity.ToTable("Orders");
entity.HasOne(o => o.DetailedOrder).WithOne()
.HasForeignKey<Order>(o => new { Id = o.OrderId, o.Rev });
});
Фактически единственная разница между регулярным отношением один к одному и разбиением таблицы заключается в плавной конфигурации ToTable
, определяющей одну и ту же таблицу для основного и зависимого объекта. Другие части конфигурации объекта должны быть такими же, как и без разделения таблицы.