忽略属性和Table-per-concrete-class(TPC)映射

时间:2015-05-06 09:06:15

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

我有抽象基类,我们称之为A

A

  • 代码
  • 姓名
  • 类型

然后是混凝土类型B和C

B在数据库中有一个Type列 但是C没有,因为它只能是一种类型,C具体类会覆盖这个属性,如

public override Types Type
{
    get { return Types.Foo; }
    set {  }
} 

我忽略了C配置中的Type属性,如

public class CConfiguration : EntityTypeConfiguration<C>
{
    public CConfiguration()
    {
        HasKey(t => t.Code);

        Map(l => l.MapInheritedProperties());

        ...

        Ignore(r => r.Type);

        ToTable("C");
    }
}

这会产生错误

  

其他信息:您不能在属性上使用Ignore方法   &#39;类型&#39;在类型&#39; C&#39;因为   此类型继承自该类型   &#39; A&#39;这个属性的位置   映射。要从模型中排除此属性,请使用   基类型上的NotMappedAttribute或Ignore方法。

如果我在基类上忽略它而不是

  

其他信息:该物业&#39; Type&#39;不是声明的财产   在类型&#39; B&#39;。验证该属性尚未明确   通过使用Ignore方法或从模型中排除   NotMappedAttribute数据注释。确保它是有效的   原始财产。

向C&#39的Type属性添加NotMappedAttribute什么都不做,我不想使用流动映射旨在删除的attrobutes

编辑:一个丑陋的解决方案是创建一个映射到数据库的内部属性,然后使用一个被忽略的公共属性。 B类的覆盖仅指向内部的

0 个答案:

没有答案