EF5(4.4 .NET 4)“导航属性不是声明的属性” TPH

时间:2018-10-09 11:13:24

标签: c# entity-framework tph

我们最近从拥有自己的InverseProperty(EntityChildNavigationProperty)和ForeignKey(EntityForeignKeyProperty)的自定义属性转变为让我们的自定义属性继承自EntityFramework的InverseProperty和ForeignKey,因为它们完成了相同的任务。我们保留了原始属性以确保向后兼容,但是现在遇到了此问题。

下面(大致)是我所拥有的类(无论如何都是重要的一点……)。任何想法,将不胜感激。每当执行查询时,而不是在初始化Context时,似乎就会发生该错误。

这个想法是,我们将拥有一个TPH结构,其中一个基类将具有所有标准属性(列),并且该组件的每个实现都可以根据需要重写或添加自己的属性,但保留相同的表名称(ClassA和/或ClassB)。

我在这里的唯一假设是,由于EntityFramework现在可以看到其属性,因此它正在尝试执行一些其他检查以确认一切正常,但是我不明白为什么这种特殊设置会产生错误。

在基类上满足ForeignKey / InverseProperty结构,为什么派生类会引起问题? EF5(.net 4.5)或EF6是否不同?

public class BaseClassA
{
    [DataMember]
    [EntityChildNavigationProperty("BaseClassA")] //Custom Attribute for InverseProperty
    public virtual ICollection<BaseClassB> BaseClassBs { get; set; }
}

public class BaseClassB
{
    [DataMember]
    public virtual int? BcbBcaId { get; set; }

    [DataMember]
    [EntityForeignKeyProperty("BcbBcaId")] //Custom Attribute for ForeignKey
    public virtual BaseClassA BaseClassA { get; set; }
}

public class ClassA : BaseClassA
{
}

public class ClassB : BaseClassB
{
}

public class Context : DbContext
{
    public DbSet<ClassA> ClassAs { get; set; }
    public DbSet<ClassB> ClassBs { get; set; }
}

0 个答案:

没有答案