2012-10-29 15 views
6

プロパティを別のテーブルの任意の列にマップしようとしています。ドキュメントは、数式は任意のSQLとすることができ、私が見る例は似ていると言います。NHIbernateの式でプロパティマッピングを使用する

しかし、NHibernateが生成するSQLは有効ではありません。式からのSQLステートメント全体がSELECTステートメントの中央に挿入されています。

 Property(x => x.Content, map => 
      { 
       map.Column("Content"); 
       map.Formula("select 'simple stuff' as 'Content'"); 
      }); 
+0

生成されたSQLは...ですか? – hazzik

答えて

9

これが道Formulaあるが設計され、そのように動作することになっています。有効なSQLを生成できるように、SQL文を括弧で囲む必要があります。

また、列と数式を一緒に指定することはできません。 SQL文全体を指定する必要があります。接頭辞/エスケープされていない列(以下の例では「id」)は、所有エンティティの表の列として扱われます。

Property(x => x.Content, map => 
{ 
    map.Formula("(select 'simple stuff' as 'Content')"); 
}); 

// or what you probably want 

Property(x => x.Content, map => 
{ 
    map.Formula("(select t.Content FROM AnotherTable t WHERE t.Some_id = id)"); 
}); 
+0

私は1つのために左右の括弧が欠けているように見えます。 Idはテーブル内のIdマッピングを表しているのか、それとも列名ですか? – Brian

+0

カラム名は「任意のsql」なので – Firo

+0

okです。だから私はこのような何かを行うでしょうか?MyTable.MyFK = {TheFKValue}とMyTable.Type = {TheType}のMyTableどこからSELECTフィールド?中カッコ内の要素は、エンティティから供給された値で置き換えられる値です。方法はありますか? – Brian

関連する問題