2008-10-24 8 views
2

Je n'arrive pas à comprendre pourquoi NHibernate fait cela.NHibernate renommer automatiquement le nom de la colonne en C#

est ici une partie de ma table dans MS SQL

CREATE TABLE Person ( 
nameFamily text, 
nameGiven text 
) 

Voilà Person.hbm.xml

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 

    <class name="Infosci.Dpd.Model.Person,Infosci.Dpd.Model" table="Person" lazy="true"> 
    <property type="string" name="NameGiven" column="nameGiven" /> 
    <property type="string" name="NameFamily" column="nameFamily" /> 
    </class> 
</hibernate> 

Et dans mon Person.cs je nommer ma propriété comme le

suivant
string NameFamily 
    { 
     get ; 
     set ; 

    } 
    string NameGiven 
    { 
     get ; 
     set ; 

    } 

Puis j'essaie de créer un enregistrement en utilisant le code suivant

ISession session = NHibernateHelper.GetCurrentSession(); 
    Person person = new Person(); 
    person.NameFamily = "lee"; 
    session.Save(person); 

Et ce qui est bizarre est quand j'essayer ne l'exécuter, NHibernate réellement changer le nom de la colonne en procédant comme suit

NHibernate: INSERT INTO Person (name_family,name_given....... 

Voici NHibernate CHAGNE mon nom de colonne de NameFamily à name_family bien que je l'ai fait préciser la colonne prénom.

Est-ce un bug de NHibernate? Ou y a-t-il une configuration à faire?

Et voici mon fichier de configuration de 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="dialect">NHibernate.Dialect.MsSql2000Dialect</property> 
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> 
    <property name="connection.connection_string">Data Source=xxxxxxx;Initial Catalog=xx;Integrated Security=True;Pooling=False;User ID=xxxx;Password=xxxx</property> 
    <property name="show_sql">true</property> 

    </session-factory> 

</hibernate-configuration> 

Et voilà comment je crée le sessionFactory

  sessionFactory = new `Configuration().Configure("hibernate.cfg.xml"). 
SetNamingStrategy(ImprovedNamingStrategy.Instance). 
AddFile("Person.hbm.xml"). 
BuildSessionFactory();` 

Répondre

4

C'est une "caractéristique" de SetNamingStrategy (ImprovedNamingStrategy.Instance)

Il sera ajouter des traits de soulignement avant chaque lettre majuscule dans les noms de casse mixte.

Je ne sais pas comment vous le désactiver (me étant pas un utilisateur NHibernate)

1

Ce que je finis par faire est d'utiliser simplement la stratégie de nommage par défaut ou SetNamingStrategy (DefaultNamingStrategy.Instance)

la stratégie de nommage défaut Ne touchez pas au nom de la boîte de dialogue

+1

Vous ne pouvez pas spécifier de stratégie de nommage au lieu de spécifier une stratégie par défaut. –

Questions connexes