如何拦截SELECT查询

Mar*_*tin 5 entity-framework entity-framework-core

我正在探索实体框架7,我想知道是否有办法拦截"SELECT"查询.每次创建,更新或删除实体时,我都会使用当前日期和时间标记实体.

SELECT * 
FROM MyTable
WHERE DeletedOn IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

我希望我的所有SELECT查询都排除已删除的数据(请参阅上面的WHERE子句).有没有办法使用Entity Framework 7?

DDi*_*ita 3

我不确定您的底层基础设施是什么样的,以及您的应用程序和实体框架之间是否有任何抽象。假设您正在DbSet<T>编写一个扩展方法来排除已删除的数据。

        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).
Run Code Online (Sandbox Code Playgroud)