2008-10-24 66 views
2

我無法弄清楚,爲什麼NHibernate的是這樣做的。NHibernate的自動重命名在C#中列名

這裏是我的表的一部分,MS SQL

CREATE TABLE Person ( 
nameFamily text, 
nameGiven text 
) 

這裏是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> 

在我Person.cs我的名字我的財產,如以下

string NameFamily 
    { 
     get ; 
     set ; 

    } 
    string NameGiven 
    { 
     get ; 
     set ; 

    } 

然後我嘗試使用以下代碼創建記錄

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

,什麼是奇怪的是,當我嘗試做執行它,NHibernate的實際執行下列

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

所以這裏的NHibernate從NameFamily chagne我的列名NAME_FAMILY雖然我沒有指定列更改列名名稱。

這是一個NHibernate的錯誤?或者我需要做什麼配置?

這是我的休眠配置文件

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

而且這是我創建了一個SessionFactory

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

回答

4

這是SetNamingStrategy(ImprovedNamingStrategy.Instance)的 「功能」

它將在混合名稱中的每個大寫字母前添加下劃線。

不知道你如何禁用它(我不是一個NHibernate的用戶)

1

我到底是什麼了做只是使用默認的命名策略或SetNamingStrategy(DefaultNamingStrategy.Instance)

默認命名策略會請勿改變混合名稱

+1

或者您可以不指定命名策略而不指定默認策略。 – 2009-02-16 08:56:38