Can .NET 4 ISet <> HashSet <> sostituire NHibernate Iesi.Collections ISet, HashSet? Sto usando il proxy Castle e NHibernate 3.0.Can .NET 4 ISet <> HashSet <> sostituire NHibernate Iesi.Collections ISet, HashSet?
risposta
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.
Sì. Ci sono due approcci:
- dichiarare la vostra collezione come
ICollection<T>
e inizializzarlo comeHashSet<T>
. Vedi this article. Io modellino le collezioni come membri privati e espongoIEnumerable<T>
quindi funziona bene, ma il lato negativo è che non è possibile esporreISet<T>
. - Utilizzare il pacchetto Set4Net4 NuGet di Jose Romaniello. Vedi this article e source code.
grazie per il collegamento. –
Mi piace il secondo approccio. – kaptan
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
Sì, con Nhibernate 4, utilizzando System.Collections.Generic.ISet<>
è ora the way to go.
http://stackoverflow.com/questions/6272636/nhibernate-unable-to-cast-persistentgenericset-to-iset –