2010-03-28 7 views
0

Dans ma quête pour approfondir mes connaissances, j'essaie de faire fonctionner NHibernate.NHibernate: Pas d'erreur persistante

je la structure suivante à ma solution

  • Core Library Projet de classe
  • Infrastructure Bibliothèque de classes du projet
  • MVC application Projet
  • projet de test

Dans mon projet de base J'ai créé l'entité suivante:

using System; 

namespace Core.Domain.Model 
{ 
    public class Category 
    { 
     public virtual Guid Id { get; set; } 

     public virtual string Name { get; set; } 
    } 
} 

Dans mon projet d'infrastructure Je le mappage suivant:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
     namespace="Core.Domain.Model" 
     assembly="Core"> 

    <class name="Category" table="Categories" dynamic-update="true"> 
    <cache usage="read-write"/> 
    <id name="Id" column="Id" type="Guid"> 
     <generator class="guid"/> 
    </id> 
    <property name="Name" length="100"/> 
    </class> 
</hibernate-mapping> 

Avec le fichier de configuration suivante:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> 
    <property name="connection.connection_string">server=xxxx;database=xxxx;Integrated Security=true;</property> 
    <property name="show_sql">true</property> 
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property> 
    <property name="cache.use_query_cache">false</property> 
    <property name="adonet.batch_size">100</property> 
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property> 
    <mapping assembly="Infrastructure" /> 
    </session-factory> 
</hibernate-configuration> 

Dans mon projet de test, je le test suivant

[TestMethod] 
     [DeploymentItem("hibernate.cfg.xml")] 
     public void CanCreateCategory() 
     { 
      IRepository<Category> repo = new CategoryRepository(); 
      Category category = new Category(); 
      category.Name = "ASP.NET"; 

      repo.Save(category); 

     } 
J'ai l'erreur suivante lorsque j'essaie d'exécuter le test:

Méthode de test Volunteer.Tests.CategoryTests.CanCreateCategory a levé l'exception: NHibernate.MappingException: Non persister pour: Core.Domain.Model.Category.

Toute aide serait grandement appréciée. J'ai l'action de construction cfg définie sur la ressource incorporée.

Merci!

Répondre

0

L'Action de génération du fichier de mappage XML doit être réglé sur Embedded Resource dans l'assemblée Infrastructure. Lorsque vous utilisez l'instruction suivante dans votre fichier de configuration: <mapping assembly="Infrastructure" />, il recherchera les mappages en tant que ressources incorporées dans cet assembly.

+0

Je l'ai fait et copié le même fichier de configuration à mon ensemble de test (qui est également défini à la ressource intégrée) – Mike

+1

Vous n'avez pas à intégrer le fichier de configuration, seul le mappage. –

+0

C'était tout. Je ne peux pas croire que je l'ai oublié. Merci de votre aide! – Mike

0

Je devine que le problème est que votre configuration de vos SessionFactory dans votre assemblage de test sans dire ce que vos correspondances sont dans votre assemblage de base, quelque chose comme

ISessionFactory factory = new Configuration().Configure() 
    .AddAssembly(typeof(Category).Assembly) <========*** 
    .BuildSessionFactory(); 

Si cela ne fonctionne pas, poster votre configuration code.

Cheers,
Berryl

+0

Je ne sais pas où ajouter ce code exactement dans mon ensemble de test. Je suis le tutoriel trouvé ici http://forerunnerg34.wordpress.com/2009/11/03/using-asp-net-mvc-and-nhibernate-part-1/ et en regardant les fichiers sources téléchargés depuis le site , Je ne vois rien comme vous avez posté. Merci – Mike

Questions connexes