2

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 から name_family に変更しますが、列名を指定しました。

これは 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();`
4

2 に答える 2

4

それは SetNamingStrategy(ImprovedNamingStrategy.Instance) の「機能」です

大文字と小文字が混在する名前では、各大文字の前にアンダースコアが追加されます。

無効にする方法がわかりません(私は休止状態のユーザーではありません)

于 2008-10-24T16:26:16.727 に答える
1

最終的には、デフォルトの命名戦略またはSetNamingStrategy(DefaultNamingStrategy.Instance)を使用するだけです。

デフォルトの命名戦略では、大文字と小文字が混在する名前は変更されません。

于 2008-10-24T17:41:45.060 に答える