NHibernate автоматически переименовывает имя столбца в C # - PullRequest
2 голосов
/ 24 октября 2008

Я не мог понять, почему NHibernate делает это.

Вот часть моей таблицы в MS SQL

CREATE TABLE Person ( 
nameFamily text,
nameGiven text
)

Вот личность.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, хотя я и указал имя столбца.

Это ошибка 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>

А вот как я создаю сессию Factory

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

Ответы [ 2 ]

4 голосов
/ 24 октября 2008

Это «особенность» SetNamingStrategy (ImprovedNamingStrategy.Instance)

Добавляет подчеркивания перед каждой заглавной буквой в смешанных именах.

Не знаю, как это отключить (я не пользователь nhibernate)

1 голос
/ 24 октября 2008

В итоге я просто использую стратегию именования по умолчанию или SetNamingStrategy (DefaultNamingStrategy.Instance)

стратегия именования по умолчанию не затрагивает смешанное имя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...