How to intercept a SELECT query

entity-framework entity-framework-core

Question

I am exploring Entity Framework 7 and I would like to know if there is a way to intercept a "SELECT" query. Every time an entity is created, updated or deleted I stamp the entity with the current date and time.

SELECT * 
FROM MyTable
WHERE DeletedOn IS NOT NULL

I would like all my SELECT queries to exclude deleted data (see WHERE clause above). Is there a way to do that using Entity Framework 7?

Popular Answer

I am not sure what your underlying infrastructure looks like and if you have any abstraction between your application and Entity Framework. Let's assume you are working with DbSet<T> you could write an extension method to exclude data that has been deleted.

        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).


Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Is this KB legal? Yes, learn why
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Is this KB legal? Yes, learn why