2

我正面临与 NH 和遗留数据库的映射关系问题。

我们有两张桌子

Table1 [
   Id primary Key (sql identity)
   Cod1,
   Cod2 ]

然后是第二张桌子

Table2 [
   CompositeCode primary key (assigned),
   Cod1,
   Cod2 ]

CompositeCode 是 Cod1 + Cod2 的计算字段,是表的键。

我正在尝试以这种方式映射 Table1 和 Table2 之间的只读多对一关系

<class name="Table2"  >
  <id name="Id" >
     <generator class="identity" />
 </id>
 <many-to-one name="Table2" 
             formula="SELECT C.CompositeCode FROM Table2 C WHERE C.Cod1= Cod1 AND C.Cod2 = Cod2"/>
  <property name="Cod1" />
  <property name="Cod2" />
</class>

NHibernate 在访问数据库时给了我这个错误:

'Incorrect syntax near the keyword 'SELECT'.

这是生成的 SQL

 SELECT TOP (100) this_.Id as Id1_37_0_, 
 this_.Cod1 as Cod1l3_37_0_, 
 this_.Cod2 as Cod24_37_0_, 
 SELECT this_.CompositeCode  FROM Table2 C WHERE this_.Cod1 = C.OCd1 AND this_.Cod2 =  C.COd2 as formula0_0_ 
 FROM Table1 this_ 

怎么了?

我也尝试将公式更改为

  formula="SELECT C.CompositeCode FROM Table2 C WHERE C.CompositeCode = Cod1 + Cod2"

但没有运气!

PS NH 是 3.1 版

4

1 回答 1

2

执行子选择的公式语句必须用大括号括 (SELECT ...)起来:

formula="(SELECT C.CompositeCode FROM Table2 C WHERE C.CompositeCode = Cod1 + Cod2)"

注意:我尝试了类似的场景并且它正在工作。除了生成的代码不是

...
,(SELECT this_.CompositeCode  FROM Table2 C .. // this_.ComositeCode

...
,(SELECT C.CompositeCode  FROM Table2 C .. // C.CompositeCode
于 2012-12-18T06:59:09.193 回答