Come intercettare una query SELECT

entity-framework entity-framework-core

Domanda

Sto esplorando Entity Framework 7 e vorrei sapere se c'è un modo per intercettare una query "SELECT". Ogni volta che un'entità viene creata, aggiornata o cancellata, stampo l'entità con la data e l'ora correnti.

SELECT * 
FROM MyTable
WHERE DeletedOn IS NOT NULL

Vorrei che tutte le mie query SELECT escludessero i dati cancellati (vedi la clausola WHERE sopra). C'è un modo per farlo usando Entity Framework 7?

Risposta popolare

Non sono sicuro di quale sia l'infrastruttura sottostante e se si dispone di un'astrazione tra l'applicazione e Entity Framework. Supponiamo che tu stia lavorando con DbSet<T> potresti scrivere un metodo di estensione per escludere i dati che sono stati cancellati.

        public class BaseEntity
        {
                public DateTime? DeletedOn { get; set; }
        }
        public static class EfExtensions
            {
                public static IQueryable<T> ExcludeDeleted<T>(this IDbSet<T> dbSet) 
                    where T : BaseEntity
                {
                    return dbSet.Where(e => e.DeletedOn == null);
                }
            }
      //Usage
      context.Set<BaseEntity>().ExcludeDeleted().Where(...additional where clause).


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché