2012-02-10 16 views

risposta

10

No, non da questa risposta.

Il motore di NHibernate utilizza l'interfaccia Iesi.Collections.ISet per le classi di raccolta interne che vengono utilizzate come wrapper attorno alle raccolte nelle classi in cui persiste NHibernate. Non c'è conversione diretta a System.Collections.Generic.ISet<T>.

Aggiornamento: NHibernate 4 ora utilizza HashSet<T> dal BCL internamente e HashedSet<T> è stato rimosso dal Iesi.Collections dipendenza. L'approccio all'uso di System.Collections.Generic.ISet<T> è ora disponibile.

18

Sì. Ci sono due approcci:

  1. dichiarare la vostra collezione come ICollection<T> e inizializzarlo come HashSet<T>. Vedi this article. Io modellino le collezioni come membri privati ​​ e espongo IEnumerable<T> quindi funziona bene, ma il lato negativo è che non è possibile esporre ISet<T>.
  2. Utilizzare il pacchetto Set4Net4 NuGet di Jose Romaniello. Vedi this article e source code.
+0

grazie per il collegamento. –

+0

Mi piace il secondo approccio. – kaptan

+0

Hm, quando l'ho provato, NHib per qualche motivo stava ricreando la mia collezione come array, quindi non ho potuto aggiungere/rimuovere elementi. Ha appena guardato ICollection e ha deciso che può mettere tutto ciò che gli piace ... – JustAMartin

2

Sì, con Nhibernate 4, utilizzando System.Collections.Generic.ISet<> è ora the way to go.

Problemi correlati