1

这是实际模式的简化示例,请多多包涵。我有一个foo带有一个id和一个value列的表。还有一个bar带有 FK 的foo表,该表有一个extended_value列。我想让 Foo 的类映射左加入 Bar 并尝试使用它的extended_value列(如果存在),否则回退到 Foo 的value.

这是我需要的SQL等价物:

select coalesce(b.extended_value, f.value) as value
  from foo f
  left join bar b on (b.id = f.id)

我在 NHibernate 之上使用 Fluent。这是我一直在尝试使用的:

Join("bar", m =>
{
    m.Optional();
    m.KeyColumn("id");
    m.Map(foo => foo.Value).Formula("COALESCE(extended_value, value)");
});

但这失败了,因为生成的 SQL 期望两者都extended_valuevalue同一张表上。

有任何想法吗?

4

2 回答 2

3

我的建议是不要在映射中这样做。

映射foo.valuebar.extended_value独立,然后coalesce在您的查询中使用和/或创建使用??运算符的未映射属性。

于 2012-10-16T18:50:58.483 回答
1

我会使用 Diego Mijelshon 的建议,但以下也应该有效

// FooMap
Map(foo => foo.Value).Formula("COALESCE((select b.extended_value from bar b WHERE b.id = id), value)");
于 2012-10-25T08:52:17.790 回答