Best practice per i modelli traducibili in Entity Framework Core 2.1+

2

Sto creando un servizio RESTful di ASP.NET Core supportato da Entity Framework e ho entità / modelli come Product, Document etc con descrizione in più lingue. Voglio essere in grado di interrogare dinamicamente i prodotti con documenti relativi fornendo le loro informazioni di base con le descrizioni tradotte (basate sulla cultura dell'interfaccia utente corrente impostata da intestazioni / cookie ecc.)

Purtroppo Include di EF Core chiamato sulle proprietà di navigazione non può essere filtrato in questo modo:

_dbContext.Products
   .Include(p => p.Documents,
          d => d.Language.Equals(CultureInfo.CurrentUICulture.TwoLetterISOLanguageName));

So che l'EF Core 2.1 ora ha i filtri globali, che possono essere usati per gestire soft delete o multi-tenancy, ecc, ma ho bisogno di filtri per richiesta per lingua (se necessario).

Quindi mi chiedo come realizzo tali funzionalità e se esiste una buona pratica per la gestione delle traduzioni in EF Core 2.1 in generale (ad esempio tramite una proprietà [Proprietà], una proprietà di navigazione con qualche estensione per includi condizionali ecc.)

    
posta Salaros 09.07.2018 - 14:14
fonte

1 risposta

2

Per quanto posso dire, non esiste una funzionalità pronta all'uso per il tuo caso d'uso.

Nota comunque che puoi sempre fare un join manuale:

var result = _dbContext
    .Products
    .Join(
        _dbContext
            .Documents
            .Where(d => d.Language.Equals(CultureInfo.CurrentUICulture.TwoLetterISOLanguageName)),
        product => product.ID,
        document => document.ProductID,
        (product, document) => new {Product = product, Document = document}
    );

E usa un GroupBy o qualsiasi altra cosa di cui potresti aver bisogno in seguito

    
risposta data 09.07.2018 - 19:02
fonte