存储库模式和IQueryable 的性能

|| 我不知道我是否做对了,但这是存储库中的
Get
方法的外观:
    public IQueryable<User> GetUsers(IEnumerable<Expression<Func<User, object>>> eagerLoading)
    {
        IQueryable<User> query = db.Users.AsNoTracking();

        if (eagerLoading != null)
        {
            foreach (var expression in eagerLoading)
            {
                query = query.Include(expression);
            }
        }            
        return query;
    }
可以说我也有一个具有
GetCountries
方法的
GeographyRepository
,与此类似。 我有2个单独的服务层类,调用这2个单独的存储库,共享相同的DbContext(EF 4.1代码优先)。 因此,在我的控制器中,我会执行以下操作:
myViewModel.User = userService.GetUserById(1);
myViewModel.Countries = geoService.GetCountries();
这是对数据库的2个单独的调用。如果我不使用这些模式并占用接口和数据库,则将有1个调用。我猜这是性能与可维护性的对比。 我的问题是,可以将其推送到1个数据库调用吗?当视图调用多个存储库时,我们可以合并这样的查询吗?
已邀请:
我会说,如果性能是真正的问题,那么我将尝试避免完全回到数据库。我假设从geoService.GetCountries()返回的列表是相当静态的,所以我倾向于在初始加载后将其缓存在服务中,并完全删除数据库。您在那里有服务的事实表明,它将是抽象出此类细节的理想场所。 通常,在询问有关性能的问题时,很少有所有与性能相关的问题都可以用同一笔画笔涂上柏油,并且您需要分析每种情况并针对您遇到的特定性能问题制定适当的解决方案。

要回复问题请先登录注册