Использование 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 обнаружить изменение имени таблицы или столбца.
В большинстве случаев поиск и замена шаг за шагом на "Свойство" с работой.