Domanda

Come si costruire gli oggetti del dominio e creare i rispettivi file di mapping NHibernate per un'applicazione multi lingua. La parte dell'interfaccia utente è memorizzato nel file di risorse, ma i dati utente ha bisogno di andare in banca dati.

Voglio fare quanto segue:

Product p = DALProduct.getByID(2)
p.name //results in the language of the current UICulture

Ho trovato il seguente articolo, che è davvero vicino: http://ayende.com/Blog/archive/2006/12/ 26 / LocalizingNHibernateContextualParameters.aspx Come io sono nuovo di NHibernate non sono sicuro se questo sarà perfettamente lavorare per soluzioni aziendali.

Avete altri suggerimenti? Come si risolve tale scenario?

Dovrebbe essere flessibile a:

  • Inserimento, Aggiornamento e selezionando
  • Collezioni
È stato utile?

Soluzione

Ayendes post è un grande inizio come dovrebbe essere progettato.

Sarà perfettamente lavorare per soluzioni aziendali. I nomi in una tabella separata è come qualsiasi altro elenco di valori. La cosa speciale è che è filtrata nella mappatura.

Modifica - Opzioni:

Usa un altro soggetto per modificare i dati

Non c'è un'entità prodotto che ha tutti i nomi come lista. LocalizedProduct ha solo il nome attuale lingue.

Prendi l'entità filtrato

  • da una mappatura come descritto nel blog, con il filtro.
  • selezionandolo con un trasformatore di risultato (Transformers.AliasToBean) oppure con 'selezionare nuove LocalizedProduct (id, nome, premio ...)'. LocalizedProduct non verrebbe mappato in questo caso. Dovrebbe essere di secondo livello-cache-friendly.

Se si dispone di molti riferimenti al prodotto, ma probabilmente non è così bello avere due classi, perché non si sa quale classe il riferimento dovrebbe avere.

Utilizzare la stessa entità per l'editing e la visualizzazione

class Product
{
  string LocalizedName 
  { 
    get { return AllProductNames[Thread.CurrentThread.CurrentCulture.LCID]; }
  }

  IDictionary<int, string> AllProductNames { get; private set; }
}

Ci sono le proprietà per il nome del prodotto localizzato (ottenere) e tutti i nomi dei prodotti.

  • Non filtrare affatto :-) C'è un po 'di sovraccarico della rete. se hai solo da 3 a 5 lingue, non è poi così male. se si dispone di 20 o più, è probabilmente meglio per filtrare i nomi.
  • utilizzare un filtro (opzionale), come descritto nel blog, ma sui nomi dei prodotti
  • utilizzare una (opzionale) ResultTransformer (CriteriaUtil.AliasToEntityMap) per filtrare i nomi.

Per essere onesti, io sceglierei un opzione che non muore bisogno di filtri nei file di mapping. Filtri appartengono alle domande in cui sono più gestibile.

Altri suggerimenti

Qui è Gavin King del Messaggio che sembra offrire una soluzione diversa.

L'approccio indicato come risposta è stata spiegata in dettaglio qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top