如何攔截SELECT查詢

entity-framework entity-framework-core

我正在探索實體框架7,我想知道是否有辦法攔截“SELECT”查詢。每次創建,更新或刪除實體時,我都會使用當前日期和時間標記實體。

SELECT * 
FROM MyTable
WHERE DeletedOn IS NOT NULL

我希望我的所有SELECT查詢都排除已刪除的數據(請參閱上面的WHERE子句)。有沒有辦法使用Entity Framework 7?

熱門答案

我不確定您的底層基礎架構是什麼樣的,以及您的應用程序和實體框架之間是否有任何抽象。假設您正在使用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).



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因