Вы заявили, что планируете использовать шаблон MVC. Это означает, что ваш пользовательский интерфейс не будет взаимодействовать с уровнем данных (в вашем случае, NHibernate). То, что будет взаимодействовать с уровнем данных, - это ваш бизнес-уровень, а ваш пользовательский интерфейс будет взаимодействовать с вашим бизнес-уровнем.
Я не знаком с ASP.NET, поэтому я не могу посоветовать вам предварительно созданную структуру для этого, но в Java, которой я в основном пользуюсь, ваши EJB-компоненты изолируют ваш интерфейс от уровень данных, совершая все такие вызовы через EJB.
Подумайте об изоляции кода для каждого уровня. У вас есть ящик для каждого уровня, и каждый ящик может общаться только с ящиком под ним через определенные каналы. Таким образом, ваш уровень данных связывается с вашей базой данных, ваш бизнес-уровень связывается с вашим уровнем данных, а ваш пользовательский интерфейс взаимодействует с вашим бизнес-уровнем. Все эти коммуникации являются односторонними (то есть ваш уровень данных не знает о бизнес-уровне и т. Д.). Это означает, что если вы хотите заменить какой-либо уровень на новую реализацию, влияние на остальную часть вашей программы может быть сведено к минимуму.
Фактическая реализация, которую вы используете для NHibernate, на самом деле не имеет отношения к использованию MVC, за исключением того факта, что ваш пользовательский интерфейс не будет знать о том, как данные хранятся или доступны.