C# 存储库模式?复杂的查询仍然放在存储库中?



我正在学习存储库模式。我已经设法编写了代码来做到这一点。

我读到文章说每个存储库都与一个实体相关。

这是我的存储库:

public class ProductRepository : BaseProductRepository
{ 
public ProductRepository(StoreDBContext context) : base(context)
{
this.context = context;
}
public override async Task<IEnumerable<TResult>> GetTopProducts<TResult>(Func<Product, TResult> selectFunc)
{
var products = this.context.Product
.Select(selectFunc)
.ToList();

return products;
}

}

我在方法中使用泛型和表达式是因为我想让调用者定义什么结果,例如来自产品的部分数据而不是产品的所有数据。

现在我遇到了一个问题。如果查询有点复杂,例如要连接的更多表并且结果数据不仅返回产品的数据,还返回购买产品的用户数量等,该怎么办?

返回复杂数据集的复杂查询在哪里?

> TResult 应该处于与该方法相关的"形状"中。 它当然不应该是一个数据库实体。

在您的情况下,GetTopProducts 的 TResult 将是产品摘要的集合。

class GetTopProductsResult
{
public IEnumerable<Product> TopProducts {get;set;}
public class Product
{
public int Id {get;set;}
public string Name {get;set;}
public int UnitsSold {get;set;}
}
}

我还建议您查看AutoMapper,它基本上将以更结构化的方式实现Select功能。

最新更新