EF:没有表一对多的子类

时间:2016-02-26 18:50:16

标签: c# entity-framework orm

我有以下情况:

  • 映射到数据库的基类,它有几个派生类,有些没有自己的表(它们不添加属性)。
  • 一个派生类,没有只有第三个类集合的表(这个类添加了一个属性但没有表,因为它只是一个关系)。
  • 第三个类,它具有基类表的外键。

    public class BaseEntity
    {
        public short Id {get;set;}
        //Other Properties
    }
    
    [NotMapped]
    public class DerivedEntity : BaseEntity
    {
        public virtual ICollection<Message> Messages {get;set;}
    }
    
    public class Message
    {
        public short Id {get;set;}
        public short DerivedEntityId {get;set;}
        public virtual DerivedEntity DerivedEntity {get;set;}
        //Other Properties
    }
    

架构:

Table BaseEntity(
    Id smallint PK,
    --Other Columns
)

Table Message(
    Id smallint PK,
    DerivedEntityId smallint FK,
    --Other Columns
)

最后是映射:

public BaseEntityMap(){
    ToTable(...);
    HasKey(x => x.Id);
    //Other Properties and Relationships
}

public MessaeMap(){
    ToTable(...);
    HasKey(x => x.Id);

    //This is the important part
    HasRequired(m => m.DerivedEntity)
        .WithMany(de => de.Messages)
        .HasForeignKey(m => m.DerivedEntityId);
}

请注意,DerivedEntity没有地图。

当EF针对数据库验证模型时,它会引发以下异常:

  

导航属性&#39; DerivedEntity&#39;不是类型&#39;消息&#39;的声明属性。验证它是否未从模型中明确排除,并且它是有效的导航属性。

我已经用Google搜索了异常,但一般情况下是因为某些映射丢失了,或者FK中的一些拼写错误等等。

我可以做一些解决方法来手动将消息附加到对应的DerivedEntity,但这可能需要两次访问数据库。 EF有办法处理这些情况吗?

我正在使用EF 6和SQL SERVER 2012。

0 个答案:

没有答案