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

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

Restrictions.Eq(string propertyName, object value)
или же
Restrictions.Eq(IProjection projection, object value)

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

Есть идеи? Заранее спасибо!

3 ответа

Решение

Используйте LINQ, QueryOver (NH3.x) или NH Lambda Extensions (NH2.x) или NHibernate Expression Extensions (NH1.2)

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

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

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

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

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

В большинстве случаев поиск и замена шаг за шагом на "Свойство" с работой.

Другие вопросы по тегам