NHibernate.MappingException - 故障排除清单(没有持久性)

时间:2010-03-19 23:05:28

标签: nhibernate debugging nhibernate-mapping

这是一个入门名单:

  1. 如果手动生成hbm,它是嵌入式资源吗?
  2. 如果使用FNH,是否通过了PerssistenceSpecification测试?
  3. 如果不使用FNH,您可以保存并加载持久化类吗?
  4. 使用Ayende的"sanity checks"
  5. 我相信你们中的许多人已经在某一点上得到过这一点。但是,当你知道你的映射设置正确时,你有没有得到它?

    在我开始使用新的存储库设计后,我开始收到此异常,但只在一个场景中! 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 :(得分:0)

这里的问题结果是我无意中将相同的会话上下文绑定到遗留和绿地数据库会话工厂,首先是绿地,然后是传统。