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 回答