Laden...

Repository Pattern - Joinen von Tabellen

Letzter Beitrag vor 23 Tagen 3 Posts 213 Views
Repository Pattern - Joinen von Tabellen

Hallo zusammen,

ich verwende ein generisches Repository-Pattern mit einer UnitOfWork. Hier kann ich meine Tabellen (in dem Fall SQL-Server Tabellen) abbilden und meine Abfragen erstellen - funktioniert wie gewünscht. Dies wird mit EF6 umgesetzt.

Aktuell lese ich dann in meiner FW 4.8 WinForms Anwendung über die UnitOfWork die Daten aus. Dies ist solange kein Problem, wenn ich nur eine Tabelle dafür benötige, da ich diese ja 1:1 als Klasse abgebildet habe.

Wie gehe ich aber vor, wenn ich joinen muss? Muss ich hier noch eine Art "Zwischenschicht" schaffen oder gibt es hier eine Art "Best Practice" wie man sowas bewerkstelligen sollte?

LG

Ein Repository kümmert sich um die Entität, die Du im Set definierst. Nicht mehr, nicht weniger.
Wenn Dein Join auf dieser Entity basiert bzw. den Start hat, darf das Teil des Repositories sein; das nennt man dann einfach Projektion.


Um Projektionen einfacher zu definieren, kann man sich mit LinqKit Profiles definieren.
https://github.com/BenjaminAbt/efcore-best-practises/blob/main/src/EntityFrameworkDemo/Database/Projections/Profiles/MyEntityNameProjectionProfiles.cs

Im Repository muss man dann nur noch Queries definieren; Queries sind Abfragen ohne Materialisierung - geben als IQueryable zurück.

    public IQueryable<MyEntity> QueryById(MyEntityId id, DbTrackingOptions to)
        => Query(to).Where(MyEntityQuery.WithId(id)); // query by Id using our static Expressions
    // because the underlaying Query is using AsExpandable, we dont have to put that onto every query method

Hallo Abt,

danke für die Rückmeldung - hilft mir schon mal weiter.

Werde mich auch mal durch das efcore-best-practise wühlen.

LG