Fluent NHibernate - исключение произошло во время настройки уровня сохраняемости

Я использую Fluent NHibernate с внешним файлом hibernate.cfg.xml.

Ниже приведен код конфигурации, в котором я получаю сообщение об ошибке:

       var configuration = new Configuration();
       configuration.Configure();

       _sessionFactory = Fluently.Configure(configuration)
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Template>())
                .BuildSessionFactory();

        return _sessionFactory;

Но когда NHibernate пытается настроить, я получаю сообщение об ошибке:

Исключение при настройке уровня сохраняемости.

Внутреннее исключение говорит:

ProxyFactoryFactory не был настроен. Инициализируйте свойство proxyfactory.factory_class раздела конфигурации фабрики сеанса одним из доступных поставщиков NHibernate.ByteCode.

Я погуглил и, согласно некоторым найденным мною решениям, внес следующие изменения:

  1. Добавьте следующие dll в корзину моего приложения:

    Castle.Core.dll, Castle.DynamicProxy2.dll, NHibernate.ByteCode.Castle.dll

  2. Добавлено свойство follwing в hibernate.cfg.xml

    ‹Имя свойства =" proxyfactory.factory_class "› NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle ‹/property›

Но все же я получаю то же исключение.


person inutan    schedule 27.10.2009    source источник
comment
Если вы щелкните помощник по исключению в Visual Studio, вы увидите InnerException (и, возможно, InnerException после этого). Можете ли вы найти их и включить как можно больше информации об ошибках? Вероятно, они раскрывают настоящую проблему.   -  person Abel    schedule 27.10.2009


Ответы (10)


Проблема может быть в вашем hibernate.cfg.xml, дважды проверьте, используется ли версия 2.2 и правильно ли он сформирован.

Сопоставление должно начинаться так:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">

Наряду с сообщенной вами ошибкой, возможно, будет предоставлена ​​дополнительная информация, потому что эта ошибка является довольно общей для анализатора конфигурации. Если нет, возможно, вы можете предоставить более подробную информацию о вашем hibernate.cfg.xml.

person Marc Climent    schedule 27.10.2009

У меня тоже была эта ошибка. Он срабатывает, если вы не копируете файл сопоставления (hibernate.cfg.xml) в каталог сборки.

Решение:

  • В обозревателе решений щелкните правой кнопкой мыши файл сопоставления (hibernate.cfg.xml), выберите Свойства, затем убедитесь, что Копировать В выходной каталог выбран вариант Копировать, если новее).
person kkmct    schedule 16.05.2010
comment
Спасибо KKMCT ... Мне очень помогло :) - person Manoj Savalia; 28.01.2012

Как сказал Alex InTechno, это может быть ошибка в определении ваших файлов сопоставления или в сопоставленных объектах. Я испытал ту же ошибку, когда забыл, что все свойства в сопоставленных классах должны быть определены как виртуальные.

public String Name {get;set;}
public virtual String Name { get; set; }
person hoonzis    schedule 05.02.2012
comment
Спасибо; это было решение моей конкретной версии этой ошибки. ReSharper предупредил меня о доступе к виртуальному члену и предложил сделать класс запечатанным, что я принял как полный нуб. - person Bernhard Hofmann; 21.03.2013

Исключение с текстом PotentialReasons

* База данных не была настроена с помощью метода базы данных.

также может быть выдано методом FluentConfiguration.BuildConfiguration () в если ваши сопоставления неверны (например, * классы карты не были успешно проанализированы) и вы настроили базу данных без использования метода .Database (). Это немного сбивает с толку, что обнаруживается только на этапе настройки сборки, а не когда эти классы добавляются из сборки (с помощью AddFromAssemblyOf ‹>)

Вы можете проверить, успешно ли преобразованы ваши классы * Map в HBM, выполнив строку m.FluentMappings.Add (typeof (YourMappedTypeMap)). ExportTo (@ "c: \ Temp \ fluentmaps"))

person Alex InTechno    schedule 09.12.2010

У меня была такая же проблема с тестами NUnit под Resharper 8.1

Галочка «ReSharper | Параметры | Инструменты | Модульное тестирование | Использовать отдельный AppDomain для каждой сборки с тестами» исправлена.

person user2821044    schedule 18.02.2014

Что ж, я смог решить эту ошибку, поместив файл .cfg.xml в корзину вызывающего приложения.

Но теперь я получаю еще одну ошибку :-(

Исключение FluentNHibernate.Cfg.FluentConfigurationException было необработанным. Сообщение: при создании SessionFactory использовалась недопустимая или неполная конфигурация. Дополнительные сведения см. В коллекции PotentialReasons и InnerException.

* База данных не была настроена с помощью метода базы данных.

Вот мой hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string">Server=dev\sql2005;Initial Catalog=TestDB;Integrated Security=True</property>
    <property name="show_sql">true</property>
  </session-factory>
</hibernate-configuration> 

Есть предположения?

person inutan    schedule 27.10.2009
comment
+1 Джеймсу. Продолжайте бегать по дереву Exceptinn, пока не найдете что-нибудь полезное. - person Richard Szalay; 27.10.2009
comment
+1 Джеймсу. У меня возникла эта ошибка, и я посмотрел на InnerException, чтобы обнаружить, что именованная строка подключения не была найдена, и понял, что в моем тестовом проекте App.config отсутствует строка подключения, которая была в моем веб-приложении Web.config. - person Chris F; 27.05.2010

Пытаясь настроить базу данных в App.config и сопоставления через Fluent NHibernate, я также получил исключение FluentNHibernateException, говорящее

  • База данных не была настроена с помощью метода базы данных.

Ссылка для отображения подробностей была деактивирована, поэтому я не мог получить дополнительную информацию. В течение нескольких часов я наконец обнаружил, что в моей строке подключения была ошибка («pasword = xyz;» вместо «password = xyz;»)

person Jakobus    schedule 17.01.2011

Попробуйте установить модификатор protected в set_id и set_sampelList. Например:

public virtual int Id {
    get; protected set;
}

и

public virtual IList<Store> StoresStockedIn {
    get; protected set;
}
person NarsilNarsilNarsilNarsil Narsi    schedule 27.11.2014

Я начинаю получать

* База данных не была настроена с помощью метода базы данных.

сообщение об ошибке при попытке подключиться к базе данных DB / 2 без внесения каких-либо изменений в мой код. Убедившись, что файл конфигурации копируется в каталог сборки, и убедившись, что мой XML правильно сформирован и соответствует версии 2.2, я наконец пошел проверить базу данных, чтобы убедиться, что ничего не изменилось.

Оказалось, что срок действия пароля для подключающейся учетной записи истек. Он не был недействительным, и учетная запись не была неактивной - срок действия пароля просто истек. Я не уверен, почему просроченный пароль проявляется в таком странном сообщении об ошибке.

person Rob    schedule 15.01.2015

Похоже, эта ошибка может быть кучей разных вещей. Я получил ту же ошибку и в конце концов понял, что это произошло из-за того, что я исключил неиспользуемое представление и отображение из проекта. Понятия не имею, как это было причиной ошибки, но как только я добавил его обратно, ошибка исчезла.

person Darian Everett    schedule 03.02.2016