我想知道是否有人可以建议我如何在EF6中首先使用代码完成以下操作
如果我将Table_3作为List添加到Table_1&我的实体中的表_2. EF会自动为Table_3中的两个表生成外键列,而不是识别它们属于同一类型.
我的模型类设置如下.
public interface IParent
{
int ID { get; set; }
List<Table_3> Children { get; set; }
}
public class Table_1 : IParent
{
[Key]
public int ID { get; set; }
public string Name { get; set; }
public virtual List<Table_3> Children { get; set; }
}
public class Table_2 : IParent
{
[Key]
public int ID { get; set; }
public string Name { get; set; }
public virtual List<Table_3> Children { get; set; }
}
public class Table_3
{
[Key]
public int ID { get; set; }
public int ParentID { get; set; }
[ForeignKey("ParentID")]
public virtual IParent Parent { get; set; }
}
EF代码首先生成以下内容
编辑
只是为了让任何有同样问题的人知道
我现在通过将IParent接口更改为抽象类来解决此问题
我的课程现在如下所示
[Table("ParentBase")]
public abstract class ParentBase
{
[Key]
public int ID { get; set; }
public List<Table_3> Children { get; set; }
}
[Table("Table_1")]
public class Table_1 : ParentBase
{
public string Name { get; set; }
}
[Table("Table_2")]
public class Table_2 : ParentBase
{
public string Name { get; set; }
}
[Table("Table_3")]
public class Table_3
{
[Key]
public int ID { get; set; }
public int ParentID { get; set; }
[ForeignKey("ParentID")]
public virtual ParentBase Parent { get; set; }
}
与表安排
如果能够满足原件的要求会更好.
最佳答案 我也有这个问题,我从一开始就使用抽象类而不是接口.
我的问题是我的table_3有两个导航属性:
一个是公共虚拟Table_1,另一个是公共虚拟Table_2,然后EF只是配置了这些额外的外键列,
我将两个导航属性合并为一个
public virtual parentbase {get; set;}.然后它奏效了.希望这可以帮助.
侧注,建议在公共列表子项上添加虚拟关键字{get;组;在parentbase类中,因为在前面的示例中,它已经是这样了.
感谢发布这个,我也遇到了这个问题.