NHibernate.MappingException - Контрольный список устранения проблем (не сохраняется для) - PullRequest
2 голосов
/ 20 марта 2010

Вот стартовый список:

  1. если hbm генерируется вручную, это встроенный ресурс?
  2. если используется FNH, проходит ли тест PerssistenceSpecification?
  3. Если вы не используете FNH, можете ли вы сохранить, а затем загрузить сохраненный класс?
  4. используйте "проверки работоспособности" Айенде

Я уверен, что многие из вас получили это в тот или иной момент. Но получили ли вы его когда-нибудь, когда знал , что ваше отображение настроено правильно?

Я начал получать это исключение после того, как начал использовать новый дизайн хранилища, но только в одном сценарии! Тесты PersistenceSpecification, как и все методы репозитория (с использованием SQLite), проходят.

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

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

Любые идеи о том, как создать контрольный список устранения неполадок и решить эту проблему?

Ура, Berryl

=== Исключительная трассировка =====

failed: NHibernate.MappingException : No persister for: Smack.ConstructionAdmin.Domain.Model.Projects.Project
at NHibernate.Impl.SessionFactoryImpl.GetEntityPersister(String entityName)
at NHibernate.Impl.SessionImpl.GetEntityPersister(String entityName, Object obj)
at NHibernate.Engine.ForeignKeys.IsTransient(String entityName, Object entity, Nullable`1 assumed, ISessionImplementor session)
at NHibernate.Event.Default.AbstractSaveEventListener.GetEntityState(Object entity, String entityName, EntityEntry entry, ISessionImplementor source)
at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent event)
at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event)
at NHibernate.Impl.SessionImpl.FireSaveOrUpdate(SaveOrUpdateEvent event)
at NHibernate.Impl.SessionImpl.SaveOrUpdate(Object obj)
NHibernate\Repository\FabioNHibRepository.cs(46,0): at Smack.Core.Data.NHibernate.Repository.FabioNHibRepository`1.Add(T item)
LegacyConversion\LegacyBatchUpdater.cs(20,0): at Smack.ConstructionAdmin.Data.LegacyConversion.LegacyBatchUpdater.ConvertOpenLegacyProjects(ILegacyProjectDao legacyProjectDao, IProjectRepository greenProjectRepository)
Data\Brownfield\ProjectBatchUpdate_SQLiteTests.cs(19,0): at Smack.ConstructionAdmin.Tests.Data.Brownfield.ProjectBatchUpdate_SQLiteTests.Test()

1 Ответ

0 голосов
/ 23 марта 2010

Проблема здесь заключалась в том, что я непреднамеренно связывал один и тот же контекст сеанса как с устаревшими, так и с новыми фабриками сеансов DB, ​​сначала с зеленым полем, а затем со старым.

...