Stiamo iniziando una nuova applicazione. Vogliamo usare Entity Framework. Abbiamo poca paura di eliminare accidentalmente le righe sql (specialmente impostando i dati correlati accidentalmente ecc.)
Ho pensato di disabilitare ogni eliminazione, dal momento che segniamo ogni riga con la colonna "validUntil" e non cancelliamo mai le righe.
Ho visto che può essere eseguito da ruoli in sql , ma voglio che tutta la logica e il controllo siano solo nel codice.
Forse nel core di Entity Framework c'è una nuova funzionalità per abilitarlo? So che può ancora scrivere row sql con EF, ma non abbiamo paura di questo caso.
Ho anche provato a rimuovere i setter delle relazioni delle entità per essere più rilassati, ma ha rotto la normale funzionalità di EF, e non mi è sembrata una buona idea.
Ho visto nel link sopra una raccomandazione per usare il Pattern del repository, ma qui sembra che non sia una buona pratica.
Come posso lavorare in sicurezza con EF? Grazie!
L'opzione di ruolo è a senso unico, ma puoi anche ignorare SaveChanges .
public override int SaveChanges()
{
foreach (DbEntityEntry entity in this.ChangeTracker.Entries)
{
if (entity.State == System.Data.EntityState.Deleted)
return;
}
base.SaveChanges();
}
MODIFICARE
Ho letto su git that for EF Core :
Se si desidera modificare il comportamento di eliminazione per tutte le relazioni, è possibile utilizzare questo codice in OnModelCreating (...) per impostarlo in blocco per tutte le relazioni nel modello.
foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
{
relationship.DeleteBehavior = DeleteBehavior.Restrict;
}