这是实际模式的简化示例,所以请耐心听我说。我有一个包含id和value列的表foo。还有一个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都在同一个表上。
有什么想法吗?
发布于 2012-10-17 02:50:58
我的建议是在映射中使用,而不是。
独立映射foo.value和bar.extended_value,然后在查询中使用coalesce和/或创建使用??运算符的未映射属性。
发布于 2012-10-25 16:52:18
我会使用Diego Mijelshon的建议,但下面的建议也应该有效
// FooMap
Map(foo => foo.Value).Formula("COALESCE((select b.extended_value from bar b WHERE b.id = id), value)");https://stackoverflow.com/questions/12917245
复制相似问题