实体框架使用来自其他存储库的功能
问题描述:
我有一个商店的ASP.NET MVC5应用程序。该应用程序已经建成,但我必须添加一些功能。实体框架使用来自其他存储库的功能
该应用程序使用具有接口和实体框架的领域层。
有一个数据库表Products
,我创建了一个表Reviews
。这些表格由ProductId <> ReviewId
链接并且具有一对多的关系。
Products
:
- 产品编号
- 产品名称
- ProductPrice
Review
:
- ReviewId
- ReviewName
- ReviewRating
- ReviewText
我创建了一个新的实体框架ReviewRepository
与功能:
getAverageForProduct(int ProductId)
它计算出的平均评价等级。
public double GetReviewAverage(int ProductId)
{
if (context.Review.Count(x => x.Product.ProductId == ProductId) == 0)
{
return 0;
}
else
{
return Math.Round(context.Review.Where(x => x.Product.ProductId == ProductId).Average(x => x.ReviewRating), 0);
}
}
现在我想显示产品页面上的平均评分。
视图设置是这样的:
@model IEnumerable<Domain.Entities.Products>
的产品展示与下面的循环:
@foreach (var m in Model)
{
}
我如何计算的平均评价得分为每一个产品?这是因为视图使用控制器的ProductRepository
(功能:getAllProducts()
),而不是ReviewRepository
。
该应用程序不使用视图模型。
答
解决了这个问题。创建一个简单的视图模型。
视图模型:
public class PopularProductList
{
public Product Product { get; set; }
public double Average { get; set; }
}
在控制器:
var model = new List<PopularProductList>();
foreach (var p in ProductRepository.GetPopularProducts())
{
var ProductList = new PopularProductList();
ProductList.Product = p;
ProductList.Average = ReviewRepository.GetReviewAverage(p.ProductId);
model.Add(ProductList);
}
return View("Index", model);