views:

1099

answers:

2

I couldn't figure out why NHibernate is doing this.

Here's part of my table in MS SQL

CREATE TABLE Person ( 
nameFamily text,
nameGiven text
)

Here's 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>

And in my Person.cs I name my property like the following

 string NameFamily
 {
  get ;
  set ;

 }
 string NameGiven
 {
  get ;
  set ;

 }

Then I try to create a record using the following code

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

And what's weird is when I try do execute it, NHibernate actually change the column name by doing the following

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

So here NHibernate chagne my column name from NameFamily to name_family although I did specify the column name.

Is this a NHibernate bug? Or is there any configuration I need to do?

And here's my hibernate config file

<?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>

And this is how I create the sessionFactory

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

That's a "feature" of SetNamingStrategy(ImprovedNamingStrategy.Instance)

It will add underscores before each uppercase letter in mixed-cased names.

Not sure how you disable it (me not being a nhibernate user)

DJ
+1  A: 

What I end up doing is just use the default naming strategy or SetNamingStrategy(DefaultNamingStrategy.Instance)

the default naming strategy will leave mix-cased name untouched

Or you can just not specify naming strategy instead of specifying default one.
Alex Reitbort