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

时间:2013-07-21 08:02:14

标签: c# entity-framework


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

问题
当用户登录我的网站时,我设置此SiteID。 在我的通用存储库中,我有方法GetQuery<TEntity>(),它返回IQueryable<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;
}

的问候,
阿萨姆

1 个答案:

答案 0 :(得分:1)

如果应用程序中的所有实体都有列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;
}