实体框架使用来自其他存储库的功能

问题描述:

我有一个商店的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);