NHibernate加入+合并

时间:2012-10-16 14:39:45

标签: c# nhibernate fluent-nhibernate fluent-nhibernate-mapping

这是实际架构的简化示例,请耐心等待。我有一个表foo,其中包含idvalue列。还有一个bar表,其中FK返回foo表,此表有一个extended_value列。我想让Foo的类地图离开加入栏并尝试使用它的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都在同一个表上。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

我的建议是在映射中执行此操作。

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

答案 1 :(得分:1)

我会使用Diego Mijelshon的建议,但以下内容也应该起作用

// FooMap
Map(foo => foo.Value).Formula("COALESCE((select b.extended_value from bar b WHERE b.id = id), value)");