Nehmen wir an, ich habe eine Produktkatalog-MVC-Webanwendung, die EF 6.0 verwendet, wo alle CRUD-Operationen von Repositories verarbeitet werden. Nun, eine der Ansichten muss eine List
von Categories
zusammen mit einigen Aggregat Informationen über Products
von diesem Category
zeigen, ich meine, dass neben Category
Name Spalte drei Spalten mit der Gesamtzahl der Produkte aus dieser Kategorie, zusammen mit Minimum und Maximum erscheinen sollte Preise von Produkten.Aggregatfunktionen mit EF-Repository
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; }
}
Dann, wenn ich ein Repository von Backwaren haben
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});
Ich brauche die Ansicht
# Category Total Products Min Price Max Price
1 Bakery products 3 4 9
Ich glaube nicht, zu zeigen, dass es eine gute Idee ist aus hand von dem Repository die Abfrage, da es die ganze Idee der Verwendung von Repositories ruiniert, und AFAIK ist es allgemein als eine schlechte Praxis anerkannt.
Einige Abfragen, die direkt die DbContext
verwenden, könnten geschrieben werden, aber ich wollte wissen, wie diese Art von Aufgaben in realen Anwendungen gehandhabt wird? Vielleicht ist ein neues Ansichtsmodell erforderlich, und dann sollte ein weiteres schreibgeschütztes Repository hinzugefügt werden, das diese Daten erhält? Etwas wie das?
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; }
}
Ihr Problem ist nicht von EF (welche verursacht zu bekommen ' DbContext' ** ist ** Repository und UOW und unterstützt leicht solche Szenarien), aber von zusätzlichen Abstraktionen (Einschränkungen), die Sie darauf setzen, entfernen Sie bitte das 'entity-framework' Tag. –
@IvanStoev Ich folgte Microsofts Artikel https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing- Die-Repository-und-Unit-of-Work-Muster-in-einem-ASP-Net-MVC-Anwendung, die erklärt, wie Repository und UoW auf EF, zu implementieren, also ja, ich habe eine zusätzliche Abstraktion, aber ich will zu verstehen, wie Menschen mit diesen Problemen umgehen, wenn sie den Microsoft-Dokumenten folgen. – Jyrkka