すべてのCRUD操作がリポジトリで処理されるEF 6.0を使用する製品カタログMVC Webアプリケーションがあります。ここでは、ビューの1つは、Categories
のList
と、の集計情報とそれに続くCategory
を示しています。これは、Category
の横に、そのカテゴリの製品の総数が最小と最大の3つの列製品の価格。私は、ベーカリー製品のリポジトリEFリポジトリを使用した集計関数
unitOfWork.ProductRepository.Insert(new Product(){Name="Doughnut", Price=4.0, CategoryId=1});
unitOfWork.ProductRepository.Insert(new Product(){Name="Apple Pie", Price=7.0, CategoryId=1});
unitOfWork.ProductRepository.Insert(new Product(){Name="Meat Pie", Price=9.0, CategoryId=1});
私は
# Category Total Products Min Price Max Price
1 Bakery products 3 4 9
を表示するビューを必要としている場合
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
public int CategoryId { get; set; }
public virtual Category Category { get; set; }
}
public class Category
{
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
その後、私は出て処理するために明るい考えであることを信じていません。リポジトリを使用するというアイデアがすべて失われてしまい、AFAIKは悪い習慣として広く認識されています。
DbContext
を直接利用するクエリを書くことができますが、このタイプのタスクが実際のアプリケーションでどのように処理されるかを知りたがっていますか? 新しいビューモデルが必要な場合があり、このデータを取得する別の読み取り専用リポジトリを追加する必要がありますか?このようなもの?
public class CategoryStatsVM
{
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
public int Count { get; set; }
public decimal MinPrice { get; set; }
public decimal MaxPrice { get; set; }
}
トランザクションファイルの最後のログを取得するには、このような集計関数を使用することができます:あなたは、もちろん一つの方法ですべてを持つことができますDbContext' **は**リポジトリとUOWであり、簡単にそのようなシナリオをサポートしています)、追加の抽象化(制限事項)から、あなたは 'entity-framework'タグを削除してください。 –
@IvanStoev私はマイクロソフトの記事に従っていました。https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-リポジトリとUoWをEFの上に実装する方法を説明しているasp-net-mvcアプリケーションのリポジトリとユニットのパターン-a-asp-net-mvc-appですので、追加の抽象化が必要ですMicrosoftの文書に従うときに人々がこれらの問題にどのように対処するかを理解する。 – Jyrkka