Usando restrições de Nibernate sem cordas no nome da propriedade
-
26-09-2019 - |
Pergunta
Ao criar um critério, você pode adicionar restrições que se aplicam a uma propriedade. Existem 2 maneiras de criar uma restrição:
Restrictions.Eq(string propertyName, object value)
ou
Restrictions.Eq(IProjection projection, object value)
A coisa é que não me sinto confortável em passar os nomes de propriedades como cordas, pois, se eles mudarem, meu projeto será compilado como de costume e qualquer possível incompatibilidade de nomeação só será encontrada durante os testes de unidade. Estou tentando implementar o TDD, mas isso não acontecerá tão cedo, então estou tentando limitar as dependências dos testes de unidade para verificar se há erros (até conseguirmos adotar o TDD).
Alguma ideia? Desde já, obrigado!
Solução
Use Linq, Queryover (NH3.x) ou Extensões NH Lambda (NH2.x) ou Extensões de expressão de Nibernato (NH1.2)
Tudo isso é mais forte do que apenas usar cordas.
Outras dicas
Eu posso sentir a sua dor.
Mas não há como colocar referência dinâmica às suas propriedades usando projeções na API de critérios, assim como você não pode fazer com que o mapeamento de Nibernato detecte uma alteração de nome da tabela ou coluna.
Fazer uma localização e substituição passo a passo por "propriedade" pelo trabalho na maioria dos casos.
Contanto que você tenha cobertura completa dos testes de unidade (você não tem?), Não deve ser um problema, deveria :-)?
Outro motivo para evitar o uso de strings para nomes de propriedades é que a refatoração usando o EG Resharper não pode corrigir essas referências. É aqui que o Nibernato fluente realmente brilha.