NHibernate遗留数据库多对一

时间:2012-12-18 06:33:35

标签: nhibernate nhibernate-mapping

我正面临着与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"

但没有运气!

P.S。 NH是版本3.1

1 个答案:

答案 0 :(得分:2)

执行subselect的公式语句必须包含在大括号 (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