Niestety EF Rdzeń obecnie (ostatnie w tym czasie v2.0) nie narażać dobrą drogę kontrolować konwencje na całym świecie.
Domyślna konwencja EF Core 2.0 to użycie DeleteBehavior.Restrict
dla potrzeb i DeleteBehavior.ClientSetNull
dla zależności opcjonalnych. To, co mogę zasugerować jako obejście tego problemu, to typowa pętla modelu metadanych na końcu nadpisania o wartości OnModelCreating
. W takim przypadku znajdź wszystkie już odkryte zależności i odpowiednio je modyfikuj:
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);
}
Dzięki za odpowiedź. Czy 'cascadeFKs' zawiera tutaj tylko relacje jeden-do-wielu, czy też zawiera relacje między wieloma osobami? –
Obecnie w EFC nie ma specjalnych relacji 'wiele do wielu' (emulowane są one przez 2' jeden-do-wielu'). Aby odpowiedzieć na twoje pytanie, 'cascadeFks' zawiera wszystkie relacje -' jeden-do-wielu' i 'jeden-do-jednego'. –