2017-06-21 74 views
1

存在着上的hasMany和HasManyToMany但由于某些原因,这种方法没有在引用这样的机制。我如何能够让流利,NHibernate的映射参考where子句

我们引用了可更新并保存为新的版本,但我们的子对象,我们并不真正关心我们只需要加载最新版本的相关对象的其他对象的对象。映射不能使用相关对象的主键,因为这将对每个版本的对象都会发生变化,所以我们希望将相关对象映射到版本之间不会更改的属性,然后将where子句设置为仅选中与最高版本匹配的元素。

所以我们的映射是像下面

References(p => p.RelatedObjectIdentifier).PropertyRef("MatchingPropIdentifier").Not.Nullable; 

我们愿意做这样的事情

References(p => p.RelatedObjectIdentifier).PropertyRef("MatchingPropIdentifier").Where(p => p.IsLatest).Not.Nullable; 

当然,我们会更新属性IsLatest(布尔属性)为每个储蓄相关对象。

如此以来,如果(P => p.IsLatest)上一类映射/ subclassmap我们如何能做到这一点任何其他方式引用不存在?

回答

0

您只能使用Where()限制,其中:

定义SQL“其中”获取此类型的对象时使用的条款。

类别映射所引用类型的上。

例子:

public class RelatedObjectMap : ClassMap<RelatedObject> 
{ 
    public RelatedObjectMap() 
    { 
     Table("RelatedObjectTable"); 

     //Id() etc. 

     Where("MatchingPropIdentifier IS NOT NULL)"); 

    } 
} 
+0

嗯不好说执行只适用于一类映射,而不是在subclassmap。同时,即使这将是这种情况下,这对我不起作用。我经常选择relatedObject的其他对象在where子句会(我认为)这阻碍是的 –

+0

的'SubclassMap '没有'如果()'函数。 – kayess