Имя типа или пространства имен «PersistentBag» не существует в пространстве имен «NHibernate.Collection».

Я обновляю решение Windows SmartClient с nHibernate 2.2 до 4.0, используя NuGet в Visual Studio 2013.

В этой строке:

sb.Append ("=" + ((NHibernate.Collection.PersistentBag) state[i]).Count.ToString() + " items");

Я получаю эту ошибку:

Имя типа или пространства имен «PersistentBag» не существует в пространстве имен «NHibernate.Collection».

Предлагаемые варианты Visual Studio (при вводе .):

  • АбстрактнаяПостояннаяКоллекция
  • Общий (пространство имен)
  • IPersistentCollection (интерфейс)
  • персистентаррайхолдер

Второй и третий - это не классы. Первый и четвертый не имеют метода Count().

Какой из них нужно использовать в этом случае?


person Al Lelopath    schedule 23.03.2016    source источник
comment
В примечаниях к выпуску ничего нет? Видимость может быть изменена на внутреннюю.   -  person Jeroen Heier    schedule 23.03.2016


Ответы (2)


В NHibernate 4 нет PersistentBag, только PersistentGenericBag<T>.

Это внутренний тип NH, к которому нельзя приводить.

Я не знаю, где этот код на самом деле находится. Если это ваш собственный, вы можете получить доступ к Count с помощью IList или ICollection, которые реализуются пакетом.

Если это код из используемого вами фреймворка, вам, вероятно, придется использовать другую версию NHibernate.

person Stefan Steinegger    schedule 24.03.2016
comment
Использование IColleciton действительно компилирует как минимум: sb.Append (propertyName[i].ToLower() + "=" + ((System.Collections.ICollection)state[i]).Count.ToString() + " items");. Я проверю это, когда решу другие проблемы. - person Al Lelopath; 24.03.2016
comment
Если вы обновляете NHibernate, вам следует ознакомиться с примечаниями к выпуску всех версий, начиная с той, которую вы использовали раньше. При выполнении чаще всего бывают еще какие-то сюрпризы.... - person Stefan Steinegger; 24.03.2016

У меня тоже есть код, использующий это. Похоже, вы можете заменить приведение persistBag приведением IList.

person Daniel Williams    schedule 07.05.2018