2010-12-03 13 views
8

VS2003、nHB 3.0.0.3001を実行し、Gallio 3.2を使用して単体テストを実行しようとしました。このコードは、 "Summer of nHibernate"の最初のセッションからのものです。テストを実行しようとすると、次のエラーが表示されます。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クラスはpublicであり、すべてのプロパティはpublic virtualです。

nHB設定ファイルはディレクトリにあり、顧客マッピングファイルは埋め込みリソースです。 行に失敗しているようだ:.hbm.xml

  • *あなたのマッピングファイルの名前されていることを確認し

    return session.Get<Customer>(customerId); 
    
  • 答えて

    23
    1. は、それが埋め込まれたリソースに設定されていることを確認します。これらは、デバッグに失敗し、それが失敗した場合に、例外をキャッチしてのInnerExceptionを見れば

    2. - NHibernateのは、そこに隠された幻想的なエラーメッセージがあります。

    は、それらのthigsを助けるホープ - そう、我々はいくつかの他のオプションの中に見ることができます(ただし、1と2は存続の問題の90%を解決)

    +0

    - について項目2、スタジオのXMLファイルのプロパティを見て、それは一番上のコンボボックスです(デフォルトはコピーしないで、Studioは開いていないと思います)。 –

    +2

    はい、ヘルプのおかげで、hbm.xmlではなくhbn.xmlという名前のマッピングファイルが作成されました。 –

    +1

    あなたのリストに2.5を追加して、あなたの工場を作るときにマッピングアセンブリをロードしていることを確認してください。 –

    0

    私は、エンティティのマッピングのための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ファイルで

    +0

    コードを説明してください。 – xxmbabanexx

    +0

    は、セッションを取得するために使用される事前郵便番号を追加しました –

    0

    、このコードを追加します。基本的には

    を、あなたのコードにその:は

    FYI
    <mapping assembly="DataTransfer" /> 
    
    関連する問題