nHibernate: не удается найти постоянный - PullRequest
8 голосов
/ 03 декабря 2010

Запуск VS2003, nHB 3.0.0.3001, попытка запустить модульное тестирование через Gallio 3.2. Код из первой сессии «Лето nHibernate». Я получаю следующую ошибку при попытке запустить тест.

NHibernate.HibernateException: Unable to locate persister: DataTransfer.Customer
TargetSite: Void OnLoad(NHibernate.Event.LoadEvent, NHibernate.Event.LoadType)
HelpLink: null
at NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent event, LoadType loadType)
at NHibernate.Impl.SessionImpl.FireLoad(LoadEvent event, LoadType loadType)
at NHibernate.Impl.SessionImpl.Get(String entityName, Object id)
at NHibernate.Impl.SessionImpl.Get(Type entityClass, Object id)
at NHibernate.Impl.SessionImpl.Get[T](Object id)
at DataAccessLayer.NhibernateDataProvider.GetCustomerById(Int32 customerId) 

Мое необразованное предположение состоит в том, что класс Customer не виден. Но и модульный тест, и уровни доступа к данным имеют ссылку на сборку DataTransfer, которая содержит класс Customer. Класс Customer является общедоступным, а все свойства общедоступными виртуальными.

Файл конфигурации nHB находится в каталоге, а файл сопоставления с клиентами является встроенным ресурсом. Кажется, не на строка:

return session.Get<Customer>(customerId);

Ответы [ 3 ]

26 голосов
/ 03 декабря 2010
  1. Убедитесь, что файл сопоставления имеет имя * .hbm.xml

  2. Убедитесь, что для него установлен встроенный ресурс.

  3. Если это не удастся, отладьте, а когда не получится, поймайте исключение и посмотрите на InnerException - в NHibernate скрыты фантастические сообщения об ошибках.

Надеюсь, что эти ветки помогут - иначе мы можем рассмотреть некоторые другие варианты (но 1 и 2 решают 90% постоянных проблем)

0 голосов
/ 13 августа 2016

В файле hibernate.cfg.xml добавьте этот код:

 <mapping assembly="(name of your Assembly Project)" />

В основном, по вашему коду:

 <mapping assembly="DataTransfer" />
0 голосов
/ 16 марта 2013

Я использую ActiveRecord для сопоставления сущностей, получаю ту же ошибку при попытке использовать ISession.Get вместо использования конфигурации для получения сеанса, например:

                     ISession session = new NHibernate.Cfg.Configuration()
                    .Configure()
                    .AddAssembly(typeof(Account).Assembly)
                    .SetInterceptor(new SqlStatementInterceptor())
                    .BuildSessionFactory().OpenSession();

Я изменил ее, чтобы работатьActiveRecordMediator:

                    ISession session = Castle.ActiveRecord.ActiveRecordMediator
                    .GetSessionFactoryHolder().
                    CreateSession(typeof(Castle.ActiveRecord.ActiveRecordBase));

теперь отлично работает ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...