Entity Framework 6 tabla múltiple a un código de relación de clave externa primero

Me pregunto si alguien podría aconsejarme sobre cómo lograr lo siguiente utilizando el código primero en EF6

introduzca la descripción de la imagen aquí

Si agrego el Table_3 como una Lista a Table_1 & Table_2 en mis entidades. EF genera automáticamente una columna de clave externa para ambas tablas en la Tabla_3 en lugar de reconocer que son del mismo tipo.

Mis clases modelo se establecen de la siguiente manera.

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; } }

El código EF primero genera el siguiente

introduzca la descripción de la imagen aquí

Editar

Solo para hacerle saber a cualquiera que tenga los mismos problemas.

Ahora he resuelto esto cambiando la interfaz de IParent a una clase abstracta que mis clases ahora tienen el siguiente aspecto

 [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; } }

con un arreglo de mesa de

introduzca la descripción de la imagen aquí

Esto funcionará aunque hubiera sido mejor si se hubiera podido cumplir con el original.

También tuve este problema, y ​​usé la clase abstracta en lugar de la interfaz desde el principio. El problema para mí fue que mi tabla_3 tiene dos propiedades de navegación: una es la tabla virtual pública_1, otra es la tabla_2 pública pública, y luego EF simplemente aprovisionó estas columnas de clave externa extra, fusioné las dos propiedades de navegación en una para public virtual parentbase {get;set;}. Y luego funcionó. Espero que esto ayude.

Nota al margen, sugeriría agregar una palabra clave virtual en la lista pública Children {get; conjunto; } en la clase de base de padres, porque en tu ejemplo anterior, ya era así.

Gracias por publicar esto, me encontré con este problema también.

También puede hacer lo siguiente cuando establezca una relación de 1 a muchos entre Table_1 y Table_2 con Table_3 respectivamente:

 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); 

Déjame saber si se requiere más aclaración.