Olá Daniel, obrigado pela resposta, mas não funcionou. Vou tentar explicar melhor.
Digamos que eu tenha uma classe Biblioteca que possui uma lista "áreas", cada área possui uma lista de "corredores", e como pai a classe biblioteca, e cada corredor possui uma lista "fileira", e um pai "área", cada fileira, possui uma lista livros, e cada livro possui o pai "fileira". Entendeu, que o nível vai descendo?
Modelo Esquemático:
Biblioteca
-----> Area
----------> Corredor
---------------> Fileira
--------------------> Livro
Modelo com as classes:
class Biblioteca {
public int Id {get;set;}
public List<Area> Areas {get;set;}
}
class Area {
public int Id {get;set;}
public Biblioteca Biblioteca {get;set;}
public List<Corredor> Corredores {get;set;}
}
class Corredor {
public int Id {get;set;}
public Area Area {get;set;}
public List<Fileira> Fileiras {get;set;}
}
class Fileira {
public int Id {get;set;}
public Corredor Corredor {get;set;}
public List<Livro> Livros {get;set;}
}
class Livro {
public int Id {get;set;}
public Fileira Fileira {get;set;}
public string Nome {get;set;}
}
Eu gostaria de que quando apagasse Biblioteca, fosse apagando os filhos que fossem necessários dentro da cadeia, em cascata. Eu consegui fazer isso com uma "gambiarra", fiz que todas as minhas classes herdassem de uma classe em comum que chamei de "Registro", e que todas elas possuíssem uma propriedade em comum chamada "Biblioteca", e então configurei da seguinte forma:
modelBuilder.Model.GetEntityTypes()
.Where(t => typeof(Registro).IsAssignableFrom(t.ClrType))
.ToList()
.ForEach(prop =>
{
modelBuilder
.Entity(prop.Name)
.HasOne(typeof(Biblioteca), "Biblioteca")
.WithMany()
.OnDelete(DeleteBehavior.Cascade);
});
Eu testei com umas 20 classes e funcionou, na migration criada, todas as 20 entidades, possuem uma FK apontando para Blibioteca, chamada "BibliotecaId" e com a propriedade, "onDelete: ReferentialAction.Cascade", mas eu tenho uma estrutura com 650 classes, fica completamente inviável eu ficar herdando todas elas da classe Registro, creio que deva existir uma forma mais simples e eficiente, porém eu não sei como fazer...