Вопрос
Какие существуют соображения для переноса приложения из NHibernate на с 1.2 по 2.0?Что такое кардинальные изменения по сравнению срекомендуемые изменения?
Есть ли проблемы с отображением?
Решение
Основные изменения в NHibernate 2.0
Если у вас хорошее тестовое покрытие, это трудоемкая работа.
Редактировать:Мы обновили его сегодня утром.В этом нет ничего особенного.Вы должны очистить () сеанс после удаления.Пространство имен Expression было переименовано в Criterion.Все это описано по ссылке выше.Сопоставления не нуждаются в изменениях.Это довольно прозрачно.О, и транзакции повсюду, но вы, вероятно, уже делали это.
Кстати, вот интересный взгляд на изменения: http://codebetter.com/blogs/patricksmacchia/archive/2008/08/26/nhibernate-2-0-changes-overview.aspx
Другие советы
Я нашел ответ здесь:
выпуск золота 2.0.0.GA
ОСНОВНЫЕ ИЗМЕНЕНИЯ с NH1.2.1GA на NH2.0.0
-
Инфраструктура
- .NET 1.1 больше не поддерживается
- Nullables.NHibernate больше не поддерживается (используйте nullable типы .NET 2.0)
- Контриб пошевелился.Новое Местоположение
-
Время компиляции
- NHibernate.Пространство имен выражений было переименовано в NHibernate.Критерий
- У IInterceptor есть дополнительные методы.(IsUnsaved был переименован в IsTransient)
- Внутренняя стратегия
- Это тип
- IEntityPersister ( идентификатор пользователя )
- IVersionType ( иверсионный тип )
- Ибатчер
- Тип IUserCollectionType
- IEnhancedUserType IEnhancedUserType
- IPropertyAccessor
- ValueTypeType переименован в PrimitiveType
-
Возможные критические изменения для внешних фреймворков
- Различные классы были перемещены между пространствами имен
- Различные классы были переименованы (в соответствии с именами Hibernate 3.2).
- Интерфейс ISession имеет дополнительные методы
- ICacheProvider ( поставщик ICacheProvider )
- Критерий
- CriteriaQueryTranslator ( Переводчик критериев )
Время инициализации
- <nhibernate> раздел в App.config больше не поддерживается и будет проигнорирован.Схема конфигурации для файла конфигурации и App.config теперь идентична, а название раздела App.config:<hibernate-configuration>
- <hibernate-configuration> используйте другую схему, и все имена свойств будут проверены
- свойства конфигурации больше не имеют префикса “hibernate.”, если раньше вы указывали “hibernate.dialect”, то теперь вы указываете просто “диалект”.
- Все именованные запросы будут проверены во время инициализации, если какой-либо из них недействителен, будет выдано исключение (при необходимости может быть отключен).
- Более строгие проверки проксирующих классов (все открытые методы должны быть виртуальными)
Время выполнения
- SaveOrUpdateCopy() возвращает новый экземпляр объекта без изменения исходного
- Автоматическая очистка не будет происходить вне транзакции - транзакции базы данных никогда не являются необязательными, все взаимодействия с базой данных должны происходить внутри транзакции, независимо от того, какие данные вы читаете или записываете.
- NHibernate вернет long для запросов count(*) на SQL Server
- <formula> при необходимости должен содержать скобки
- Эти имена функций HQL могут вызвать конфликт в вашем HQL зарезервированными именами являются:
- подстрока
- найти
- обрезать
- длина
- bit_length ( длина бита)
- сливаться
- нулевой
- пресс
- мод
- sqrt
- верхний
- ниже
- отлитый
- извлечь
- конкат
- current_timestamp - отметка текущего времени
- системный сервер
- второй
- минута
- час
- день
- месяц
- год
- str
- <any> когда meta-type=”class”, постоянным типом является строка, содержащая класс.Полное имя
- Чтобы задать параметр в запросе, вы должны использовать setParameter(”paraName”, typeof(YourClass).Полное имя, NHibernateUtil.ClassMetaType)