Чтобы ответить на первую часть вашего вопроса, да, ваша бизнес-логика и проверка должны идти в ваших сущностях. Смысл NHibernate в том, чтобы позволить вам создавать свои сущности так, чтобы они оставались невежественными. Это означает, что вы должны, когда это возможно, проектировать свои сущности так, как если бы вы не заботились о постоянстве. Это не совсем выполнимо, как вы скоро узнаете (вам нужно будет сделать ваши свойства виртуальными, чтобы поддерживать отложенную загрузку, и если вы хотите использовать NHibernate Validator, вы будете украшать свои свойства атрибутами проверки), по большей части NHibernate делает хорошую работу, чтобы держаться подальше от вашего пути.
Что касается использования ваших сущностей в качестве моделей, вы получите смешанные обзоры по этому вопросу. В идеале вы должны создать отдельные классы модели представления и сопоставить их от сущностей с моделью представления, чтобы ваши представления имели доступ только к минимальному количеству необходимой информации. Это также имеет большое значение для предотвращения N + 1 проблем с доступом . Тем не менее, это часто - огромная боль. Конечно, есть такие инструменты, как AutoMapper , которые облегчат перенос свойств вашей сущности в модель представления.