这是实际架构的简化示例,请耐心等待。我有一个表foo
,其中包含id
和value
列。还有一个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_value
和value
都在同一个表上。
有什么想法吗?
答案 0 :(得分:3)
我的建议是不在映射中执行此操作。
单独映射foo.value
和bar.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)");