Wie kann ich Kreuztabellen mit Repository Pattern abfragen?

8

In meiner asp.net mvc 3-Anwendung verwende ich das Repository-Muster. Ich habe 3 Entitäten, Firma, Land, Stadt. Jeder von ihnen hat sein eigenes Repository. Die Unternehmenseinheit verfügt über Fremdschlüssel von FoundedCountry und FoundCity. Jetzt in einer Ansicht, möchte ich die Firmendetails zeigen. In dieser Ansicht möchte ich die Firmendetails sowie den Namen FoundedCountry und den Namen FoundedCity anzeigen. Meiner Meinung nach muss ich das mit einer Art JOIN-Abfrage behandeln. Aber ich stehe fest, wie dies im Repository-Muster erreicht werden kann. Wie kann ich diesen JOIN im Repository-Muster behandeln?

Danke.

    
SherleyDev 23.04.2012, 21:37
quelle

2 Antworten

4

Das Repository sollte eine aufgabenbasierte Schnittstelle haben. Dies bedeutet, dass ORMs, Joins usw. im Repository sind. Die App sieht nur eine Schnittstelle, die ein Objekt zurückgibt, das sie verwenden kann.

Dies bedeutet, dass Sie kein Repository um eine Tabelle herum erstellen (es widerspricht dem Zweck ziemlich). In Ihrem Szenario schlage ich vor, dass Sie mindestens zwei Repositories haben: Eines wird alles, was mit der Aktualisierung des Modells zu tun hat, und das andere wird nur Leseoperationen (Abfragen) ausführen.

Dies bedeutet, dass das Abfrage-Repository nur die gewünschten Daten zurückgibt (es gibt im Grunde View-Modell-Bits zurück). Natürlich sind die tatsächlichen Tabellen und Joins ein Implementierungsdetail des Repositories.

    
MikeSW 24.04.2012, 10:06
quelle
2

Konstruieren Sie Ihr Repository-Muster nicht so, dass Joins verhindert werden! Dies bedeutet normalerweise, den gleichen ORM-Kontext (DataContext / ObjectContext) für alle Instanzen zu verwenden, die der aktuellen HTTP-Anfrage zugeordnet sind.

Ich halte es für ein Anti-Pattern, ein generisches IRepository zu haben, weil der Datenbankzugriff selten gleichzeitig auf einen einzigen Typ von Entity beschränkt ist.

Sie könnten den DataContext / ObjectContext selbst als Repository betrachten.

Ein letzter Hinweis: Wenn Sie nicht wissen, wofür eine Repository-Abstraktion gut ist - verwenden Sie keine.

    
usr 23.04.2012 22:32
quelle