8

プロパティを別のテーブルの任意の列にマップしようとしています。ドキュメントによると、式は任意のSQLである可能性があり、私が見た例も同様です。

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

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

1 に答える 1

10

これが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)");
});
于 2012-10-30T14:42:08.497 に答える