我依赖于几家外部数据供应商。每个供应商都有不同的数据模型。我将其映射到内部数据结构。
对于简单性让我们从供应商处拨打项目
的数据所以我有一个Item表,它是我的TPT的基表
基本上它只包含Id
和Name
然后我有从子表“派生”的子表
这适用于 TPT ,但对于某些供应商而言,一个子表是不够的。我想对这些子表使用 TPC ,否则会有很多连接等。
Configs看起来像这样,给定示例数据供应商的名称是 Foo
public class ItemConfig : EntityTypeConfiguration<Item>
{
public ItemConfig()
{
HasKey(k => k.Id);
ToTable("Item");
}
}
public class FooItemConfig : EntityTypeConfiguration<FooItem>
{
public FooItemConfig()
{
Property(cst => cst.Code) //External Identifier for supplier Foo
.HasMaxLength(50)
.IsRequired();
//Because of TPC this config does not map to a table
}
}
public class ConcreteFooItemConfig : EntityTypeConfiguration<ConcreteFooItem>
{
public ConcreteFooItemConfig()
{
Map(m => m.MapInheritedProperties());
ToTable("ConcreteFooItem");
}
}
看起来非常直截了当,但我得到了
附加信息:无法按照定义映射“ConcreteFooItem”类型 因为它映射了使用实体的类型的继承属性 分裂或其他形式的继承。要么选择不同的 继承映射策略,以便不映射继承的属性,或 更改层次结构中的所有类型以映射继承的属性和 不要使用分裂。
编辑:我可以将 FooItem 更改为接口 IFooItem ,这样可以使用,但它不是真正的选项,因为我想成为能够从 FooItem
特定的域逻辑对 FooItem 级别进行查询