我面临着 NH 和旧数据库的映射关系问题。
我们有两张 table
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"
但运气不佳!
附注NH是3.1版本
最佳答案
执行子选择的公式语句必须括在大括号中(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
关于NHibernate 遗留数据库多对一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13927563/