entity framework6首先将多个表与一个外键关系代码

我想知道是否有人可以建议我如何在EF6中首先使用代码完成以下操作

在此处输入图像描述

如果我将Table_3作为列表添加到我的实体中的Table_1和Table_2。 EF会自动为Table_3中的两个表生成外键列,而不是识别它们属于同一类型。

我的模型类设置如下。

public interface IParent { int ID { get; set; } List Children { get; set; } } public class Table_1 : IParent { [Key] public int ID { get; set; } public string Name { get; set; } public virtual List
Children { get; set; } } public class Table_2 : IParent { [Key] public int ID { get; set; } public string Name { get; set; } public virtual List
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
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类中,因为在前面的示例中,它已经是这样了。

感谢发布这个,我也遇到了这个问题。

您还可以执行以下操作,其中您分别使用Table_3Table_1Table_2之间Table_1 1对多的关系:

 modelBuilder.Entity().HasOptional(/*Nav Prop*/).WithMany(m => m.Table_3s).HasForeignKey(f => f.ParentId).WillCascadeOnDelete(false); modelBuilder.Entity().HasOptional(/*Nav Prop*/).WithMany(m => m.Table_3s).HasForeignKey(f => f.ParentId).WillCascadeOnDelete(false); 

如果需要澄清,请告诉我。