Sto usando il primo sviluppo del database e l'utilizzo di Scaffold-DbContext per creare il progetto dei miei modelli di entità. In quel progetto, ho un dbContext parziale in cui sovrascrivo metodi come SaveChangesAsync per impostare determinate proprietà come "LastModifiedBy".
Sto cercando di cancellare i record usando le colonne dateDeleted / userDeleted. Quando vado a scavalcare la routine OnModelCreating, vedo che è già definita nel contesto parziale generato automaticamente.
Sto cercando di fare qualcosa di simile al seguente:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<SomeEntity>().HasQueryFilter(x => x.DateDeleted == null);
}
Qualcuno ha qualche suggerimento su come posso farlo in un modo di classe parziale che mi consente comunque di rigenerare il contesto originale al volo usando Scaffold-DbContext?
Inoltre, sto usando .NET Core 2.1.5
RISPOSTA DI David Browne - Microsoft
Aggiungi una proprietà statica sul contesto parziale
public static bool GlobalFiltersAdded { get; set; } = false;
Quindi aggiungi una routine per aggiungere i tuoi filtri:
private void AddGlobalFilters(ModelBuilder modelBuilder){
SomeContext.GlobalFiltersAdded = true;
}
Quindi nel tuo contesto generato aggiungi quanto segue:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
AddGlobalFilters(modelBuilder);
//OTHER LOGIC WILL BE HERE
}
Opzioni:
1) Elimina l'OnModelCreating generato dopo il re-scaffolding. È già un processo manuale e genera un errore di compilazione se si dimentica.
2) Utilizzare un DbContext ereditato dal DbContext generato.
3) Utilizzare uno strumento o una libreria di terze parti come: EF Core Power Tools