我的表有四列,我想在多个类之间拆分。
table1
key
col1
col2
col3
col4
Class ClassA
key
col1
col2
class ClassB
key
col3
col4
modelBuilder.Entity()ToTable("表1&#34);。
。modelBuilder.Entity()ToTable("表1&#34);
目前它给了我
System.InvalidOperationException:'无法使用表' table1'对于实体类型' ClassB'因为它被用于实体类型' ClassA'
是否可以在EF Core中使用?
由于
答案 0 :(得分:1)
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");
答案 1 :(得分:0)
您可以为 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>();
这将创建表列:
Discriminator 列用于确定实体的类型。您可以通过 HasDiscriminator 方法控制此列。除了使用上面定义的实体外,还可以使用例如:
modelBuilder.Entity<ClassBase>().HasDiscriminator<int>("ClassType")
.HasValue<ClassA>(1)
.HasValue<ClassB>(2);