Ricordo che c'erano problemi con entità generiche nella precedente EF. Che ne dici di EF Core? Non riesco a trovare documenti relativi a questo argomento.
Per esempio:
public abstract class Parent<TEntity> {
public int EntityId { get; set; }
public TEntity Entity { get; set; }
}
public class Child : Parent<Foo> {
}
public class OtherChild : Parent<Bar> {
}
// config for child entities includes this:
config.HasKey(c => c.EntityId);
Sebbene ciò dimostri che le entità figlio non definiscono una chiave primaria, quando lo fanno chiaramente!
Posso risolvere questo problema rendendo Parent
non generico.
Ci sono documenti ufficiali per questo? Sto facendo qualcosa di sbagliato, o è questo il comportamento previsto?
Posso usare questo modello in ef-core 1.1.0:
public abstract class Parent<TEntity>
{
public int EntityId { get; set; }
public TEntity Entity { get; set; }
}
public class Child : Parent<Foo>
{
}
public class OtherChild : Parent<Bar>
{
}
public class Foo
{
public int Id { get; set; }
}
public class Bar
{
public int Id { get; set; }
}
Con questa mappatura nel contesto:
protected override void OnModelCreating(ModelBuilder mb)
{
mb.Entity<Child>().HasKey(a => a.EntityId);
mb.Entity<Child>().HasOne(c => c.Entity).WithMany().HasForeignKey("ParentId");
mb.Entity<OtherChild>().HasKey(a => a.EntityId);
mb.Entity<OtherChild>().HasOne(c => c.Entity).WithMany().HasForeignKey("ParentId");
}
Che porta a questo fantastico modello: