我最近开始在我的服务中实现存储库模式,我遇到了一个小问题,我想提出一些建议。
在我的服务中使用以下代码:
[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)]
public Policy GetPolicyById(int policyId, int historyId)
{
// Don't do the if not deleted check here, as we can do it on our Controller.
// This means we can use this function if we have to access the deleted records.
return _policy.GetByID(policyId, historyId);
}
这个函数显然是直接从服务接口引用的,.GetByID 方法是我的通用存储库的一部分。
主要问题是:如果我想.Where(a => !a.Deleted)
对这个结果集做 a 怎么办。您可以通过我的代码注释看到我的一般想法是什么,但这是“正确”的做法吗,应该在服务级别、控制器(UI)级别完成,还是应该在其中创建函数我的非通用存储库允许此功能?
** 更新 **
这是我的代码的另一部分,在我的策略存储库中:
/// <summary>
///
/// </summary>
/// <param name="policyId"></param>
/// <param name="historyid"></param>
/// <returns></returns>
public virtual IEnumerable<Policy> GetPolicies(int take, int skip)
{
var policies = GetPoliciesHistoryGrouped().Take(take).Skip(skip);
return policies;
}
/// <summary>
/// Returns all non-deleted (bitDelete) policies (in an expression, not comitted via the database),
/// grouped by the latest history ID.
/// </summary>
/// <returns></returns>
private IEnumerable<Policy> GetPoliciesHistoryGrouped()
{
// Group and order by history ID.
var historyIDs = _context.Policies.Where(a => !a.bitDelete)
.GroupBy(a => a.intPolicyId).Select(group => new
{
PolicyID = group.Key,
HistoryID = group.Max(a => a.intHistoryID)
});
var query = (from h in historyIDs
join p in _context.Policies on new { h.HistoryID, h.PolicyID } equals new { HistoryID = p.intHistoryID, PolicyID = p.intPolicyId }
select p).OrderBy(a => a.intPolicyId);
return query;
}
这种深度不应该在存储库层,而是在服务层,GetPoliciesHistoryGrouped
仍然需要在其中创建和共享功能?记住,.Take 和 .Skip 在分组完成之前不能被调用。