Использование ограничений NHibernate без строк в имени свойства - PullRequest
1 голос
/ 01 сентября 2010

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 01 сентября 2010

Используйте LINQ, QueryOver (NH3.x) или NH-лямбда-расширения (NH2.x) или NHibernate Expression Extensions (NH1.2)

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

0 голосов
/ 01 сентября 2010

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

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

0 голосов
/ 01 сентября 2010

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

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

Поиск и замена шаг за шагом на «Свойство» с работой в большинстве случаев.

...