В качестве известного ORM мы решили использовать nHIbernate с asp.net mvc3. Мы настроили наш проект следующим образом:
- Репозиторий NHibernate [содержит сопоставления, службы и репозитории для nhibernate]
- MVC3 [это пользовательский интерфейс]
- Test MVC NHibernate [это тестовый проект с NUnit]
В приведенном выше тексте [] написано, чтобы прояснить слои.
Все работает нормально, означает, что все модульные тесты пройдены для операций сопоставления, вставки, обновления, удаления.
К сожалению, когда мы выполняем ту же операцию из нашего приложения mvc3, оно выдает следующую ошибку:
"An exception occurred during configuration of persistence layer."
Полная трассировка стека выглядит следующим образом:
at NHibernate.Cfg.ConfigurationSchema.HibernateConfiguration..ctor(XmlReader hbConfigurationReader, Boolean fromAppSetting) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\ConfigurationSchema\HibernateConfiguration.cs:line 55
at NHibernate.Cfg.ConfigurationSchema.HibernateConfiguration..ctor(XmlReader hbConfigurationReader) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\ConfigurationSchema\HibernateConfiguration.cs:line 36
at NHibernate.Cfg.Configuration.Configure(XmlReader textReader) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 1511
at NHibernate.Cfg.Configuration.Configure(String fileName, Boolean ignoreSessionFactoryConfig) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 1433
at NHibernate.Cfg.Configuration.Configure(String fileName) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 1418
at NHibernate.Cfg.Configuration.Configure() in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 1404
at examplemvcapp.NHibernateRepository..ctor() in D:\example\examplemvcapp-NHExample\examplemvcapp\NHibernateRepository.cs:line 33
at examplemvcapp_NHExample.UI.Models.CreateAppraisalModel..ctor() in D:\example\examplemvcapp-NHExample\examplemvcapp-NHExample.UI\Models\Department.cs:line 70
Обратите внимание, что все параметры конфигурации для NHIbernate в приложении MVC3 такие же, как и в тестовом проекте.
Вот парень, у которого мы получили исключение:
using (var nhr = new NHibernateRepository())
{
this.Departments = nhr.GetAll<Departments>().Select(x => new SelectListItem
{
Text = x.Departmentdescription, Value = x.Id.ToString()
});
}
Выше приведут до следующего и выкинут исключение:
public NHibernateRepository()
{
if (sessionFactory == null)
{
config = new Configuration();
config.Configure();
config.AddAssembly(typeof(NHibernateRepository).Assembly);
sessionFactory = config.BuildSessionFactory();
}
Session = sessionFactory.OpenSession();
transaction = Session.BeginTransaction();
Rollback = false;
}
В тестовом проекте выше все работает нормально:
using (var nhr = new NHibernateRepository())
{
var DeptList = nhr.GetAll<Departments>();
}
Ниже приведен файл hibernate.cfg.xml, размещенный в проекте NHibernateRepository:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Data Source=(local);Initial Catalog=myDatabaseName;Integrated Security=True</property>
<property name="show_sql">true</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<property name="cache.use_query_cache">false</property>
<property name="adonet.batch_size">100</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
</session-factory>
</hibernate-configuration>
Помимо этого, в этом проекте есть все dll, необходимые для NHibernate.
В тестовом проекте нет специальных настроек конфигурации, мы просто добавляем ссылку на проект репозитория и другие сборки, необходимые для этого, и он работает нормально.
То же самое поддерживалось в проекте приложения MVC3.
Любая помощь в этом отношении наиболее заметна.
Привет