如何在fluent-nhibernate映射中为引用创建where子句

时间:2017-06-21 13:44:50

标签: nhibernate where-clause fluent-nhibernate-mapping

在HasMany和HasManyToMany上存在这样的方法,但由于某种原因,在引用上没有这样的机制。

我们有一个对象引用了另一个可以更新并保存为新版本的对象,但是从我们的子对象中我们并不在意我们只想加载相关对象的最新版本。映射不能使用相关对象的主键,因为这将针对对象的每个版本进行更改,因此我们希望将相关对象映射到不在版本之间更改的属性,然后将where子句设置为仅选择具有最高版本的匹配元素。

所以我们的映射类似于以下

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

我们想做类似的事情

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

当然,我们会为每个相关对象的保存更新属性IsLatest(bool属性)。

因为Where(p => p.IsLatest)在classmap / subclassmap的References上不存在,我们怎样才能以任何其他方式实现呢?

1 个答案:

答案 0 :(得分:0)

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

  

定义SQL'其中'检索此类对象时使用的子句。

在引用类型的类映射上。

示例:

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

        //Id() etc.

        Where("MatchingPropIdentifier IS NOT NULL)");

    }
}