2012-02-10 11 views

Odpowiedz

10

Nie, nie w tej odpowiedzi.

Silnik NHibernate używa interfejsu Iesi.Collections.ISet w wewnętrznych klasach zbierania, które są używane jako opakowania wokół kolekcji w klasach, które NHibernate utrzymuje. Nie ma bezpośredniej konwersji na System.Collections.Generic.ISet<T>.

Aktualizacja: NHibernate 4 używa teraz HashSet<T> z BCL wewnętrznie i HashedSet<T> została usunięta z zależnością Iesi.Collections. Obecnie dostępne jest podejście do korzystania z System.Collections.Generic.ISet<T>.

18

Tak. Istnieją dwa podejścia:

  1. zadeklarować swój kolekcję jako ICollection<T> i zainicjować go jako HashSet<T>. Zobacz this article. Modeluję kolekcje jako prywatne członków i ujawniam IEnumerable<T>, więc to działa dobrze, ale wadą jest to, że nie można ujawnić ISet<T>.
  2. Użyj pakietu Set4Net4 NuGet autorstwa Jose Romaniello. Zobacz this article i source code.
+0

dzięki za link. –

+0

Podoba mi się drugie podejście. – kaptan

+0

Hm, kiedy próbowałem, NHib z jakiegoś powodu odtwarzał moją kolekcję jako tablicę, więc nie mogłem dodawać/usuwać przedmiotów. Po prostu spojrzał na ICollection i zdecydował, że może umieścić to, co lubi ... – JustAMartin

2

Tak, z Nhibernate 4, używając System.Collections.Generic.ISet<> jest teraz the way to go.

Powiązane problemy