nHibernate: не удается найти persister
запуск 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 ответов
убедитесь, что файл сопоставления имеет имя *.hbm.в XML
убедитесь, что для него установлен встроенный ресурс.
если они терпят неудачу, отлаживают и когда это терпит неудачу, ловят исключение и смотрят на InnerException - NHibernate имеет фантастический обмен сообщениями об ошибках, скрытый там.
надеюсь, что эти штуки помогут - в противном случае мы можем посмотреть на некоторые другие варианты (но 1 и 2 решают 90% постоянных проблем)
Я использую ActiveRecord для сопоставления сущностей, получил ту же ошибку при попытке использовать ISession.Получить, вместо использования конфигурации для получения сеанса, как это:
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));
теперь его работа велика..
на вашем спящем режиме.контекстно-свободная грамматика.xml-файл, добавьте этот код:
<mapping assembly="(name of your Assembly Project)" />
в основном, на вашем коде его:
<mapping assembly="DataTransfer" />