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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top