如何阻止NHibernate添加“this_”。查询而不创建方言

时间:2013-09-06 16:21:44

标签: nhibernate oracle11g fluent-nhibernate fluent-nhibernate-mapping

我使用Fluent NHibernate查询我的Oracle 11g数据库。 在流畅的映射文件中,我有一个看起来像

的映射
Map(x => x.WaterLevel).Formula("CAST(WATER_LEVEL AS DOUBLE PRECISION )")

但是,当我运行测试时,我得到了

Oracle.DataAccess.Client.OracleException : ORA-00907: missing right parenthesis

由于SQL转换中的其他字符串(this_。):

 CAST(this_.WATER_LEVEL AS this_.DOUBLE this_.PRECISION )

我提到过     How can you stop NHibernate (via ActiveRecord) adding this_. to a table name in a formulaHow can I stop NHibernate adding "or this._property is null" to generated queries?但建议的解决方案对我不起作用。

1 个答案:

答案 0 :(得分:0)

重现问题的唯一方法是关闭方言设置。换句话说,要使用NHibernate.Dialect.GenericDialect

但是这些方言中的任何一种都正常运作:

<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
  <session-factory name="myFactory">
     ...
     <property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
     // or
     <property name="dialect">NHibernate.Dialect.Oracle9iDialect</property>
     // or
     <property name="dialect">NHibernate.Dialect.Oracle8iDialect</property>

因此,您不必按照问题中的说明创建方言。只需使用现有的一个,这总是更好的选择,然后是通用的......