Hirdetés

Új hozzászólás Aktív témák

  • joysefke

    veterán

    EF Core vs Generikus repository/UoW + eager loading child-of-child property /.ThenInclude()/

    Hogyan kell EF Core-val generikus repositoryt illetve UnitOfWorkot csinálni? :B

    EF4-hez találtam jó tutorialt:
    https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application#implement-a-generic-repository-and-a-unit-of-work-class

    Itt a generikus repo lekérdező metódusai paraméterként elfogadnak egy stringet is, amely az eager-loaded property-k neveinek egymástól vesszővel elválasztott listáját tartalmazza. A lényegi rész itt van, ez éppen egy Get-metódus:

    public virtual IEnumerable<TEntity> Get
    (...,string includeProperties = "")
    { IQueryable<TEntity> query = dbSet; ... foreach (var includeProperty in includeProperties.Split (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) {     query = query.Include(includeProperty); }

    Többek között ezt szeretném EF-Core3-ra átportolni. A problémám az, hogy EF Core-ra (úgy általában) nem találtam megoldást, hogy a gyemek property-k gyermekeit (és esetleg azoknak a gyermekeit) is betöltsem a generikus lekérdező-metódusban anélkül, hogy a hívó félnek EFCore-dependenciát adnék.

    Pld egy N-N táblarelációt hogyan kezeljek? EF Core-ban ugye több-több kapcsolathoz kell egy join table (EFC-ben join entitás). A MS-os pédánál maradva lesznek nekem Student, StudentCourse és Course entitásaim. Mi van ha én a Student entitáshoz nem csak a StudentCourse entitásokat, hanem a Course entitásokat is be szeretném tölteni?

    Meg lehet ezt értelmesen oldani?

    Workaroundként, ha csak a childokat csak első ízig töltöm be (vagy első ízig SEM), akkor ha a lekérdezéseim a kliensnek IQueryable<TEntity>-t adnak vissza, akkor a kliens kedvére LINQ-joinolhat és a JOIN/lekérdezés még mindig az SQL Serveren hajtódik végre.

    Vélemény?

Új hozzászólás Aktív témák