Использование ограничений NHibernate без строк в имени свойства

Когда вы создаете критерий, вы можете добавить ограничения, которые применяются к свойству. Есть 2 способа создания Ограничения:

Restrictions.Eq(string propertyName, object value)
or
Restrictions.Eq(IProjection projection, object value)

Дело в том, что мне неудобно передавать имена свойств в виде строк, поскольку, если они когда-либо изменятся, мой проект будет компилироваться как обычно, и любое возможное несоответствие имен будет обнаружено только во время модульного тестирования. Я пытаюсь реализовать TDD, но этого не произойдет в ближайшее время, поэтому я пытаюсь ограничить зависимости модульного тестирования для проверки ошибок (пока нам не удастся принять TDD).

Любые идеи? Заранее спасибо!


person viniciushana    schedule 31.08.2010    source источник


Ответы (3)


Используйте LINQ, QueryOver (NH3.x) или NH Lambda Extensions (NH2.x) или Расширения выражения NHibernate (NH1.2)

Все они более строго типизированы, чем просто строки.

person Mauricio Scheffer    schedule 31.08.2010
comment
Спасибо! Это очень интересно. Мне не терпится увидеть стабильную NH 3.0. - person viniciushana; 01.09.2010

Я чувствую твою боль.

Но нет способа поставить динамическую ссылку на ваши свойства с помощью проекций в API критериев, точно так же, как вы не можете заставить сопоставление nHibernate обнаруживать изменение имени таблицы или столбца.

В большинстве случаев поиск и замена шаг за шагом с помощью «Собственности» работают.

person Community    schedule 31.08.2010
comment
Да, я тоже думал об этом, но, к сожалению, я не могу полагаться на своих товарищей по команде, если вы понимаете, о чем я ... - person viniciushana; 01.09.2010

Пока у вас есть полный охват модульных тестов (не так ли?), Это не должно быть проблемой, не так ли :-)?

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

person Andreas Paulsson    schedule 01.09.2010
comment
Свободный NHibernate предназначен только для картографии. OP спрашивает, как избежать строк при запросе - person Mauricio Scheffer; 01.09.2010