2012-12-18 63 views
2

我正面临与NH和传统数据库的映射关系问题。NHibernate遗留数据库多对一

我们有两个表

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

然后第二表

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

CompositeCode是计算的字段作为COD1 + COD2并且是表的键。

我试图映射只读多到一个这样

<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的击中分贝时,给了我这个错误Table 1和表2之间的关系:

'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_ 

怎么了?

我也tryied改变分子式为

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

,但没有运气!

P.S. NH是3.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 
+0

谢谢你就像一个魅力! –