nHibernate:找不到持久器

nHibernate:找不到持久器,nhibernate,Nhibernate,运行VS2003,NHB3.0.0.3001,尝试通过Gallio3.2运行单元测试。代码来自“nHibernate之夏”的第一节。尝试运行测试时出现以下错误 NHibernate.HibernateException: Unable to locate persister: DataTransfer.Customer TargetSite: Void OnLoad(NHibernate.Event.LoadEvent, NHibernate.Event.LoadType) HelpLink:

运行VS2003,NHB3.0.0.3001,尝试通过Gallio3.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类是公共的,所有属性都是公共虚拟的

nHB配置文件位于目录中,客户映射文件是一个嵌入式资源。似乎失败了 行:

返回会话.Get(customerId);
  • 确保映射文件名为*.hbm.xml

  • 确保已将其设置为嵌入式资源

  • 如果这些失败,调试,当它失败时,捕获异常并查看InnerException-NHibernate中隐藏了奇妙的错误消息


  • 希望这些东西能有所帮助-否则我们可以研究其他一些选项(但1和2解决了90%的持久化问题)

    我正在使用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));
    

    现在它工作得很好。

    在hibernate.cfg.xml文件中,添加以下代码:

     <mapping assembly="(name of your Assembly Project)" />
    
    
    
    基本上,在您的代码中:

     <mapping assembly="DataTransfer" />
    
    
    
    FYI-对于第2项,请查看studio中的XML文件属性,它是顶部的组合框(我相信默认设置为“不复制”,但我没有打开studio)。是的,谢谢您的帮助,映射文件名为hbn.XML而不是hbm.XML。我还将在列表中添加一个2.5,确保您在创建工厂时正在加载映射程序集。
     <mapping assembly="DataTransfer" />