2010-12-03 12 views
8

Exécution de VS2003, nHB 3.0.0.3001, en essayant d'exécuter un test unitaire via Gallio 3.2. Le code provient de la première session de "Summer of nHibernate". Je reçois l'erreur suivante lors de la tentative d'exécution du test. Ma supposition très peu éduquée est que la classe Customer ne peut pas être vue. Mais le test unitaire et les couches d'accès aux données font référence à l'ensemble DataTransfer qui contient la classe Customer. La classe Customer est publique et toutes les propriétés sont publiques virtuelles.nHibernate: Impossible de localiser persister

Le fichier de configuration nHB se trouve dans le répertoire et le fichier de mappage client est une ressource incorporée. Semble échouer sur la ligne :

return session.Get<Customer>(customerId); 

Répondre

23
  1. Assurez-vous que votre fichier de mappage est nommé * .hbm.xml

  2. Assurez-vous qu'il est réglé sur une ressource intégrée. Si ceux-ci échouent, déboguent et quand il échoue, attrapez l'exception et regardez le InnerException - NHibernate a caché la messagerie d'erreur fantastique là.

espère que ces thigs aident - sinon nous pouvons examiner d'autres options (mais 1 et 2 résoudre 90% des problèmes de Persister)

+0

Pour votre information - pour item 2, regarde les propriétés du fichier XML en studio, c'est la zone de liste déroulante du haut (je crois que la valeur par défaut est Do not Copy mais je n'ai pas Studio ouvert). –

+2

Oui, le fichier de mapping a été nommé hbn.xml et non pas hbm.xml merci pour l'aide. –

+1

Je voudrais également ajouter un 2.5 à votre liste assurez-vous de charger l'assemblage de cartographie lors de la création de votre usine. –

0

J'utilise ActiveRecord pour la cartographie de l'entité, a obtenu la même erreur quand essayé d'utiliser ISession.Get, au lieu d'utiliser la configuration pour récupérer session, comme ceci:

     ISession session = new NHibernate.Cfg.Configuration() 
        .Configure() 
        .AddAssembly(typeof(Account).Assembly) 
        .SetInterceptor(new SqlStatementInterceptor()) 
        .BuildSessionFactory().OpenSession(); 

je l'ai changé pour travailler par ActiveRecordMediator:

    ISession session = Castle.ActiveRecord.ActiveRecordMediator 
        .GetSessionFactoryHolder(). 
        CreateSession(typeof(Castle.ActiveRecord.ActiveRecordBase)); 

maintenant son grand travail ..

+0

Veuillez expliquer votre code. – xxmbabanexx

+0

ajouté le code pré-post utilisé pour récupérer la session –

0

Sur votre fichier hibernate.cfg.xml, ajoutez ce code:

En gros, sur votre code son:

<mapping assembly="DataTransfer" />