2010-01-02 7 views
0

Avant d'exposer le problème, s'il vous plaît consulter le codeNHibernate problème de cartographie Oracle

Base de données (Oracle) SQL:

create table test_tab(
id number, 
Name varchar2(50) 
); 

classe correspondante en C#:

public class TestTable 
    { 
     private long id; 
     public virtual long Id { 
      get { 
       return id; 
      } 
      set { 
       id = value; 
      } 
     } 

     private string name; 
     public virtual string Name 
     { 
      get 
      { 
       return name; 
      } 
      set 
      { 
       name = value; 
      } 
     } 
    } 

Le fichier de mappage pour ceci:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DataTransfer" namespace="DataTransfer"> 
    <class name="DataTransfer.Models.TestTable, DataTransfer" table="TEST_TAB"> 
    <id name="Id" column="ID" type="long" unsaved-value="0"> 
     <generator class="sequence"> 
     <param name="sequence"> 
      seq_test 
     </param> 
     </generator> 
    </id> 
    <property name="Name" column="NAME" type="string" not-null="false"/> 
    </class> 
</hibernate-mapping> 

Le "TestTable" classe se trouve dans le dossier Modèles sous projet DataTransfer

fichier de configuration de la figuration mise en veille prolongée:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> 
    <property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property> 
    <property name="connection.connection_string">Data Source=xe;Persist Security Info=True;User ID=hr;Password=hr;Unicode=True</property> 
    <property name="show_sql">false</property> 
    <property name="dialect">NHibernate.Dialect.Oracle9Dialect</property> 
    <!-- mapping files --> 
    <mapping assembly="DataTransfer" /> 
    </session-factory> 
</hibernate-configuration> 

Et voici mon code DataAccessLayer;

public void AddToTestTable(Test_Tab user) 
     { 
      using (ISession session = GetSession()) 
      { 
       using (ITransaction tx = session.BeginTransaction()) 
       { 
        try 
        { 
         session.Save(user); 
         session.Flush(); 
        } 
        catch (NHibernate.HibernateException) 
        { 
         tx.Rollback(); 
         throw; 
        } 
       } 
      } 
     } 

Maintenant, le problème est quand j'insérer une valeur rien à la base de données (en utilisant le formulaire de ASP.NET simples) se (même pas d'exceptions!). Mais cela a fonctionné parfaitement quand je n'ai pas utilisé le dossier "Models" pour la classe TestTable et le dossier "Mappings" pour les fichiers de mapping. Sil te plait aide moi.

+0

Oups !!!!!!!! J'ai trouvé mon problème !! – FlintOff

+1

Monsieur Flint, si vous avez trouvé la solution, vous devriez créer une «réponse» et l'accepter, pour que les générations futures en profitent. –

+0

Comment insérer/ajouter une entité à la base de données? Pouvez-vous montrer du code s'il vous plaît? Est-ce que vous videz la session par exemple? Ou, comment as-tu confisqué le flushmode? –

Répondre

1

Assurez-vous que le fichier de mappage .hbm.xml est incorporé en tant que ressource dans l'ensemble DataTransfer.

+0

Lorsque le mappage n'est pas incorporé en tant que ressource, NH lèvera une exception car il traitera la classe comme une classe 'non persitent'. En d'autres termes: il va lancer une exception puisqu'il ne sait pas comment persister l'entité. –

+0

Non, ce n'était pas mon problème. Mais merci pour votre réponse – FlintOff

Questions connexes