2

NH とレガシー データベースとのマッピング関係の問題に直面しています。

私たちは2つのテーブルを持っています

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

次に、2 番目のテーブル

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

CompositeCode は、Cod1 + Cod2 の計算フィールドであり、テーブルのキーです。

この方法で、Table1 と Table2 の間の読み取り専用の多対 1 の関係をマップしようとしています

<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

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
于 2012-12-18T06:59:09.193 に答える