Так что мои модульные тесты зеленые, пришло время интегрировать этот новый DAL на основе NHibernate в мое веб-приложение! Я на самом деле не хочу поддерживать два файла конфигурации, поэтому я перенес файл hibernate.cfg.xml в свой файл Web.config (т.е. я скопировал содержимое файла hibernate.cfg.xml в свой файл Web.config). Вот соответствующие биты из моего Web.config:
<configSections>
<section name="combres" type="Combres.ConfigSectionSetting, Combres, Version=2.0.0.0, Culture=neutral, PublicKeyToken=49212d24adfbe4b4"/>
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<nhibernate xmlns="urn:nhibernate-configuration-2.2">
<session-factory name="">
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Data Source=(local)\SQLExpress;Initial Catalog=MyProject;Integrated Security=True</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<listener class="MyProject.Sql.Listeners.SaveEventListener, MyProject" type="save"/>
<listener class="MyProject.Sql.Listeners.UpdateEventListener, MyProject" type="update"/>
</session-factory>
</nhibernate>
В Global.asax на Application_Start я пытаюсь инициализировать свою конфигурацию:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
SessionProvider.Initialize();
}
Все, что на самом деле делает, это вызывает new Configuration().Configure().AddAssembly("MyProject");
в соответствии с приведенным выше кодом конфигурации.
Интересный результат: когда я впервые захожу на страницу, выдается исключение:
[FileNotFoundException: Could not find file 'D:\Build\MyProject\Source\MyProject.Web\bin\hibernate.cfg.xml'.]
Ну, я поместил конфигурацию в Web.config, разве она не должна выглядеть там? Нужно ли указывать «эй, NHibernate, обратите внимание - данные конфигурации находятся в Web.config, фиктивный!» где-нибудь? * * 1013
Когда я нажимаю F5, появляется страница. Ура! Теперь я пытаюсь что-то сделать с доступом к данным и получаю следующее исключение:
[ProxyFactoryFactoryNotConfiguredException: The ProxyFactoryFactory was not configured.
Initialize 'proxyfactory.factory_class' property of the session-factory configuration section with one of the available NHibernate.ByteCode providers.
Example:
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
Example:
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>]
Да, это тоже немного странно - это отлично работало в тесте с конфигурацией в hibernate.cfg.xml ... и я указываю это свойство в моем файле Web.config ... Интересно, что может быть?
Так, у кого-нибудь есть идеи? Любая помощь в разгадывании этой тайны будет супер!
* Обновление: Я нашел проблему. Похоже, я не использовал правильный тип в моем разделе конфигурации! D'о. У меня есть полная запись в моем блоге .