Вы не используете идентификатор протокола (например, file://
или assembly://
) в имени ресурса, поэтому Spring использует файловый протокол по умолчанию.Он пытается разрешить файл hbm из того места, где запущено веб-приложение (путь к devserver), , а не , где хранятся его файлы, что, как вы, вероятно, ожидаете.
Для ссылки нафайл на вашем веб-сайте, используйте ~
для определения корня вашего веб-сайта, например, <value>file://~/EMSApplication.Domain/EMSApplication.hbm.xml</value>
.Но убедитесь, что файл скопирован, что может быть не так, поскольку вы установили его для встроенного ресурса (почему?).
Рассмотрите следующие улучшения, они сделают вашу жизнь проще:
- переместите код в ваших папках
dao
, domain
и NHibernate
в отдельную сборку (проект библиотеки классов, на которую ссылается ваше веб-приложение) с именем Your.AssemblyName
. - Фабрика сеансов также поддерживает указание сопоставлений сборок для сканирования, поэтому вам не нужно указывать каждый файл - см. Документацию по , чтобы настроить фабрику сеансов с помощью spring.net .Укажите
Your.AssemblyName
в списке сборок сопоставления:
<object id="MySessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate">
<property name="DbProvider" ref="DbProvider"/>
<property name="MappingAssemblies">
<list>
<value>Your.AssemblyName</value>
</list>
</property>
<property name="HibernateProperties">
<!-- snip -->
</object>
И посмотрите пример NHibernate в весенних документах - он очень применим к вопросам, которые вы поднимаете здесь.