2016-03-23 5 views
0

Я перехожу решение для Windows SmartClient от NHibernate 2.2 до 4.0, используя NuGet в Visual Studio 2013.тип или пространство имен имя «PersistentBag» не существует в пространстве имен «NHibernate.Collection»

На этой линии :

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

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

The type or namespace name 'PersistentBag' does not exist in the namespace 'NHibernate.Collection'

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

  • AbstractPersistentCollection
  • Generic (пространство имен)
  • IPersistentCollection (интерфейс)
  • PersistentArrayHolder

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

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

+0

Ничего в примечаниях к выпуску? Видимость может быть изменена на внутреннюю. –

ответ

1

Нет PersistentBag в NHibernate 4, только PersistentGenericBag<T>.

Это внутренний тип NH и не должен использоваться.

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

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

+0

Использование 'IColleciton' выполняет компиляцию как минимум:' sb.Append (propertyName [i] .ToLower() + "=" + ((System.Collections.ICollection) state [i]). Count.ToString() + " элементы ");'. Я проверю это, когда у меня возникнут другие проблемы. –

+0

Если вы обновляете NHibernate, вы должны взглянуть на заметки о выпуске всех версий, начиная с той, которую вы использовали раньше. Во время выполнения чаще всего появляются сюрпризы .... –