EF Core Table Splitting - Одна таблица для нескольких классов
В моей таблице четыре столбца, и я хочу разделить ее на несколько классов.
table1
key
col1
col2
col3
col4
Class ClassA
key
col1
col2
class ClassB
key
col3
col4
. ModelBuilder.Entity() ToTable("таблица1");
. ModelBuilder.Entity() ToTable("таблица1");
В настоящее время это дает мне
System.InvalidOperationException: "Невозможно использовать таблицу" table1 "для типа сущности" ClassB ", поскольку она используется для типа сущности" ClassA "
Возможно ли это в EF Core?
Спасибо
1 ответ
Вы можете определить базовый класс для ClassA и ClassB:
abstract class ClassBase
{
public int Key { get; set; }
}
public class ClassA : ClassBase
{
public int Col1 { get; set; }
public int Col2 { get; set; }
}
public class ClassB : ClassBase
{
public int Col3 { get; set; }
public int Col4 { get; set; }
}
Затем вы можете определить следующее отображение:
modelBuilder.Entity<ClassA>().HasBaseType<ClassBase>();
modelBuilder.Entity<ClassB>().HasBaseType<ClassBase>();
Это создаст столбцы таблицы:
- ключ
- Col1 (обнуляемый)
- Col2 (обнуляемый)
- Col3 (обнуляемый)
- Col4 (обнуляемый)
- дискриминатор
Дискриминатор столбец для определения типа объекта. Вы можете управлять этим столбцом методами HasDiscriminator. Вместо определения сущностей, как указано выше, вы можете использовать, например:
modelBuilder.Entity<ClassBase>().HasDiscriminator<int>("ClassType")
.HasValue<ClassA>(1)
.HasValue<ClassB>(2);
Возможно, вам понадобятся отношения, определенные следующим образом, на основе этих документов MS:
modelBuilder.Entity<ClassA>()
.HasOne(e => e.ClassB).WithOne(e => e.ClassA)
.HasForeignKey<ClassB>(e => e.Key);
modelBuilder.Entity<ClassA>().ToTable("Products");
modelBuilder.Entity<ClassB>().ToTable("Products");