如何使用实体框架添加默认搜索条件(或谓词)

本文关键字:条件 谓词 搜索 默认 何使用 实体 框架 添加 | 更新日期: 2023-09-27 18:24:01


概述:
我的数据库中的所有表都包含一个列SiteID,它是对表"Sites"的引用。这个想法是按站点对表进行分区。因此,根据我的代码,我想将此SiteID作为默认搜索条件

问题
当任何用户登录我的网站时,我都会设置此SiteID。在我的Generic Repository中,我有一个返回IQueryable<TEntity>对象的方法GetQuery<TEntity>()。在下面的方法中有没有一种方法可以附加这个默认搜索条件

注意:我有一种感觉,这更多的是一种与设计相关的问题,而不是实体框架。

public IQueryable<TEntity> GetQuery<TEntity>() where TEntity : class
{
    return from query in DbContext.Set<TEntity>()
               join site in DbContext.Set<Site>() on "JOIN_CONDITION??" 
               equals Site.SiteID
               select query;
}

问候,
阿萨姆

如何使用实体框架添加默认搜索条件(或谓词)

如果应用程序中的所有实体都有列SiteID,则创建一些接口来定义SiteID属性

public interface ISiteDependent // of course consider better domain specific name
{
   int SiteID { get; set; }
}

并让你的实体实现它。使用这个接口作为通用约束:

public IQueryable<TEntity> GetQuery<TEntity>() 
    where TEntity : class, ISiteDependent
{
     return from query in DbContext.Set<TEntity>()
            join site in DbContext.Set<Site>() 
                 on query.SiteID equals site.SiteID // SiteID is available now
            select query;
}