我不知道为什么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>
在我的个人中.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 chagne 我的列名从 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>
这就是我创建会话工厂的方式
sessionFactory = new `Configuration().Configure("hibernate.cfg.xml").
SetNamingStrategy(ImprovedNamingStrategy.Instance).
AddFile("Person.hbm.xml").
BuildSessionFactory();`
SetNamingStrategy(ImprovedNamingStrategy.Instance)的一个"功能"
它将在混合大小写名称中的每个大写字母之前添加下划线。
不确定如何禁用它(我不是 nhibernate 用户)
我最终要做的只是使用默认的命名策略或SetNamingStrategy(DefaultNamingStrategy.Instance)
默认命名策略将保持大小写混合的名称不变