Migração do NHibernate 1.2 para 2.0
-
09-06-2019 - |
Pergunta
Que tipos de considerações existem para migrar um aplicativo do NHibernar 1,2 a 2,0?O que são mudanças significativas vs.alterações recomendadas?
Existem problemas de mapeamento?
Solução
Mudanças importantes no NHibernate 2.0
Se você tiver uma boa cobertura de teste, será um trabalho árduo.
Editar:Nós atualizamos esta manhã.Não há nada importante.Você precisa liberar () a sessão após excluí-la.O namespace Expressão foi renomeado para Critério.Tudo isso é abordado no link acima.Os mapeamentos não precisam de alterações.É bastante transparente.Ah, e transações em todos os lugares, mas provavelmente você já estava fazendo isso.
A propósito, aqui está uma visão interessante das mudanças: http://codebetter.com/blogs/patricksmacchia/archive/2008/08/26/nhibernate-2-0-changes-overview.aspx
Outras dicas
Encontrei a resposta aqui:
versão ouro 2.0.0.GA
ÚLTIMAS MUDANÇAS de NH1.2.1GA para NH2.0.0
-
A infraestrutura
- .NET 1.1 não é mais compatível
- Nullables.NHibernate não é mais suportado (use tipos anuláveis do .NET 2.0)
- Contrib mudou-se.Nova localização
-
Tempo de compilação
- O namespace NHibernate.Expression foi renomeado para NHibernate.Criterion
- IInterceptor possui métodos adicionais.(IsUnsaved foi renomeado como IsTransient)
- INamingStrategy
- Eu digito
- IEntityPersister
- IVersionType
- IBatcher
- IUserCollectionType
- IEnhancedUserType
- IPropertyAccessor
- ValueTypeType renomeado para PrimitiveType
-
Possíveis alterações significativas para estruturas externas
- Várias classes foram movidas entre namespaces
- Várias classes foram renomeadas (para corresponder aos nomes do Hibernate 3.2)
- A interface ISession possui métodos adicionais
- ICacheProvider
- Critério IC
- CritériosQueryTranslator
Tempo de inicialização
- A seção <nhibernate>, em App.config, não é mais suportada e será ignorada.O esquema de configuração para arquivo de configuração e App.config agora é idêntico, e o nome da seção App.config é:<configuração de hibernação>
- <hibernate-configuration> tem um esquema diferente e todos os nomes de propriedades estão marcados
- as propriedades de configuração não são mais prefixadas por “hibernate.”, se antes você especificava “hibernate.dialect”, agora você especifica apenas “dialect”
- Todas as consultas nomeadas serão validadas no momento da inicialização, uma exceção será lançada se alguma não for válida (pode ser desabilitada se necessário)
- Verificações mais rigorosas para classes de proxy (todos os métodos públicos devem ser virtuais)
Tempo de execução
- SaveOrUpdateCopy() retorna uma nova instância da entidade sem alterar a original
- O AutoFlush não ocorrerá fora de uma transação - As transações do banco de dados nunca são opcionais, toda comunicação com o banco de dados deve ocorrer dentro de uma transação, independentemente de você ler ou gravar dados.
- NHibernate retornará long para consultas count(*) no SQL Server
- <fórmula> deve conter parênteses quando necessário
- Esses nomes de funções HQL que podem causar conflito em seus nomes reservados HQL são:
- substring
- localizar
- aparar
- comprimento
- comprimento_bit
- coalescer
- nulo se
- abdômen
- moda
- quadrado
- superior
- mais baixo
- elenco
- extrair
- concat
- carimbo de data/hora atual
- data do sistema
- segundo
- minuto
- hora
- dia
- mês
- ano
- str
- <any> quando meta-type=”class” o tipo persistente é uma string contendo Class.FullName
- Para definir um parâmetro em uma consulta você deve usar SetParameter(”paraName”, typeof(YourClass).FullName, NHibernateUtil.ClassMetaType)