我有以下情况:
第三个类,它具有基类表的外键。
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。