【发布时间】:2018-12-04 09:16:17
【问题描述】:
我想将一个表映射到两个不相关的实体:EntityBasic 和 EntityAdvanced。 EntityAdvanced 有额外的业务逻辑,我不需要这个功能,我想创建一个只包含表中字段的新实体。
我的表:
MyTableId : Guid
ParentId : Guid
Name : string
Description : string
Type : int
实体基础:
[Table("MyTable")]
public class EntityBasic
{
[Key]
public Guid MyTableId { get; set; }
public Guid ParentId { get; set }
public string Name { get; set; }
public string Description { get; set; }
public int Type { get; set; }
[ForeignKey("ParentId")]
public virtual List<EntityBasic> Entities{ get; set; }
}
EntityAdvanced:
[Table("MyTable")]
public class EntityAdvanced
{
private List<EntityAdvanced> _entities;
private List<Filter> _filters;
[Key]
public Guid MyTableId { get; set; }
public Guid ParentId { get; set }
public string Name { get; set; }
public string Description { get; set; }
public int Type { get; set; }
[ForeignKey("ParentId")]
public virtual List<EntityAdvanced> Entities
{
get { //Some complicated getter }
set { //Some complicated setter }
}
[NotMapped]
public string ImageUrl
{
get { //Some complicated getter }
set { //Some complicated setter }
}
public void SetFilters(//Some parameters)
{
//Some logic
}
}
当我这样做时,我得到了这个错误:
实体类型“EntityAdvanced”和“EntityBasic”不能共享表“MyTable”,因为它们不在同一类型层次结构中,或者它们之间没有有效的一对一外键关系和匹配的主键。
有没有办法做我想做的事?
【问题讨论】:
-
使
EntityAdvanced继承并建立在EntityBasic之上。这将满足“相同类型的层次结构”
标签: c# entity-framework-6