NHibernate自动重命名C#中的列名

时间:2008-10-24 16:06:19

标签: c# nhibernate hibernate

我无法弄清楚为什么NHibernate会这样做。

这是我在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错误吗?或者我需要做任何配置吗?

这是我的hibernate配置文件

<?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();`

2 个答案:

答案 0 :(得分:4)

这是SetNamingStrategy的“功能”(ImprovedNamingStrategy.Instance)

它会在混合外壳名称中的每个大写字母前添加下划线。

不确定如何禁用它(我不是nhibernate用户)

答案 1 :(得分:1)

我最终做的只是使用默认命名策略或SetNamingStrategy(DefaultNamingStrategy.Instance)

默认命名策略将保持混合大小的名称不受影响