7

我在令人羡慕的情况下不得不与遗留数据库集成,幸运的是只读的目的,并选择使用NHibernate。到目前为止,一切都很好,但我有一个新的要求,让我挠头。使用鉴别器与流利NHibernate的多层次的继承

在今天之前,我在表中有一列可以作为鉴别器,但现在事实证明,在某些情况下,我需要有多个鉴别器列。这可能与NHibernate?

我已经研究过使用公式,它的工作,但现在我有问题,我需要排除'未知'的子类(还没有映射)。例如,我有这样的:

DiscriminateSubClassesOnColumn("") 
    .Formula("case ... when ... then ... when .. then ... else 'unknown' end"); 

我希望能够过滤掉一切,这是“未知” ......

编辑:我认为,一个可能的解决方案是使用AlwaysSelectWithValue(),启用它有什么影响?我相信这与在nhibernate映射xml中的force是一样的。

回答

2
public BaseClassMap() 
{ 
    Where("discriminatorColumn <> 'unknown'"); 
    // or 
    Where("discriminatorColumn = 'known1' or discriminatorColumn = 'known2'"); 
} 
+0

我试过这样的事情,但它抱怨discriminatorColumn不是已知的列。 – jonnii

+1

* discriminatorColumn *必须是您在公式中区分的列。 NH并不在乎你指定哪一列,但它必须在数据库中才有用 – Firo