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_3
在Table_1
和Table_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);
如果需要澄清,请告诉我。