Malheureusement, la version actuelle d'EF Core (la dernière en date est la v2.0) n'offre pas de moyen efficace de contrôler les conventions de manière globale.
La convention par défaut de EF Core 2.0 est d'utiliser DeleteBehavior.Cascade
pour les besoins et DeleteBehavior.ClientSetNull
pour les relations facultatives. Ce que je peux suggérer comme solution de contournement est une boucle typique de modèle de métadonnées à la fin de l'élément OnModelCreating
contournement. Dans ce cas, il s'agit de repérer toutes les relations déjà découvertes et de les modifier en conséquence :
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// ...
var cascadeFKs = modelBuilder.Model.GetEntityTypes()
.SelectMany(t => t.GetForeignKeys())
.Where(fk => !fk.IsOwnership && fk.DeleteBehavior == DeleteBehavior.Cascade);
foreach (var fk in cascadeFKs)
fk.DeleteBehavior = DeleteBehavior.Restrict;
base.OnModelCreating(modelBuilder);
}