Domanda

Fluent NHibernate non piace questo, gettando un errore:

  

{ "Associazione dei riferimenti alle classi non mappato: System.String"}

bene OK, posso capire perché questo causerebbe un problema - ma ciò che è la soluzione migliore?

Non voglio davvero per memorizzare un elenco delimitato di stringhe in un unico campo, questo sarebbe ottenere brutto se il mio elenco contiene molte stringhe.

anche io non voglio davvero un 'stringa' tavolo, per ovvie ragioni.

Credo di poter risolvere questo avvolgendo il mio List<string> all'interno di una classe, ma questo si sente un po 'pesante. Sto iniziando a pensare la sua la migliore soluzione però.

Qual è il modo migliore per ottenere Fluent NHibernate per gestire questo?

Sono totalmente aspetto che tali valori siano memorizzati in un altro tavolo. Ho pensato che forse che io sia stato in grado di impostare una certa convenzione automapping che indica NHibernate 'Se vedi un class X che contiene List<*some primitive type*>, poi andare avanti e creare automaticamente una tabella di riferimento che associa a questa collezione.

Ci si sente un po 'pesante per andare e avvolgere ogni singola collezione in una classe. Se questa è la soluzione migliore comunque, allora così sia.

È stato utile?

Soluzione

Ho avuto questo stesso problema esattamente un paio di settimane fa, con carri, invece di stringhe.

how-do-you-automap-listfloat -o-float-con-fluente-NHibernate

Si scopre che Automapping non funziona con tipi primitivi.

Modifica - Questo non è più vero - la squadra FNH ha risolto il problema

C'è un sacco di codice di esempio nella risposta accettata alla mia domanda, ma il punto chiave è quello di aggiungere un override per le vostre liste di tipi primitivi ( "RawY" nell'esempio qui sotto):

public class DlsAppOverlordExportRunData
{
    public virtual int Id { get; set; }
    // Note: List<float> needs overrides in order to be mapped by NHibernate.
    // See class DlsAppOverlordExportRunDataMap.
    public virtual IList<float> RawY { get; set; }
}


// Must be in different namespace from DlsAppOverlordExportRunData!!!
public class DlsAppOverlordExportRunDataMap : IAutoMappingOverride<DlsAppOverlordExportRunData>
{
    public void Override(AutoMapping<DlsAppOverlordExportRunData> mapping)
    {
        // Creates table called "RawY", with primary key
        // "DlsAppOverlordExportRunData_Id", and numeric column "Value"
        mapping.HasMany(x => x.RawY)
               .Element("Value");
    }
}

Mi aspetto lo stesso approccio di lavorare con ILists di stringhe.

Altri suggerimenti

Da quando ho inviato la mia prima risposta, il team di Fluent NHibernate ha risolto questo problema.

È possibile ILists ora Automap di tipi C # di valore (stringhe, interi, galleggianti, etc).

Basta assicurarsi di avere una versione recente di FNH.

Pensare in questo modo ... come lo faresti senza di ibernazione? Beh, si sarebbe probabilmente ha una tabella con una colonna di chiave esterna e la stringa? Ora, come si fa a farlo con Hibernate? È messa a punto un'altra classe con una relazione molti-a-uno e la proprietà di stringa. Poi si mappa una collezione di quella classe.

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