我可以结合TPT和TPC继承吗?

时间:2015-05-06 16:52:06

标签: c# entity-framework ef-code-first entity-framework-6

我依赖于几家外部数据供应商。每个供应商都有不同的数据模型。我将其映射到内部数据结构。

对于简单性让我们从供应商处拨打项目

的数据

所以我有一个Item表,它是我的TPT的基表

基本上它只包含IdName

然后我有从子表“派生”的子表

这适用于 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 级别进行查询

0 个答案:

没有答案