1

我有一个场景,我使用 nhibernate 将记录从一个表映射到基于鉴别器的几个不同的派生类。

public class BaseClass { }

public class DerivedClass0 : BaseClass { }
public class DerivedClass1 : BaseClass { }
public class DerivedClass2 : BaseClass { }

然后我使用 nhibernate 的 DiscriminateSubClassesOnColumn() 方法并更改配置以包含

<subclass name="DerivedClass0" extends="BaseClass" discriminator-value="discriminator0" />
<subclass name="DerivedClass1" extends="BaseClass" discriminator-value="discriminator1" />
<subclass name="DerivedClass2" extends="BaseClass" discriminator-value="discriminator2" />

这样在映射时,这些类将被强制转换为它们的派生类,而不是 BaseClass。

但是,我的数据库中有一些记录有一个没有相应子类的鉴别器。在这些情况下,nHibernate 会抛出错误:

"Object with id: 'xxx' was not of the specified subclass..."

有什么方法可以处理这个问题,以便将任何没有相应子类的记录转换为 BaseClass 而不是抛出错误?

我已经尽可能地简化了上述内容,但是值得注意的是 XML 是动态编辑的,这就是我同时引用流利的 nhibernate [DiscriminateSubClassesOnColumn()] 和 XML 的原因。

以下事情(这会有所帮助)不是一种选择:

  • 我无法更正数据以删除无效记录
  • 我无法为那些没有子类的记录创建子类

我需要处理 nHibernate 尝试映射到鉴别器并发现不存在的情况。

4

1 回答 1

1

解决方案是在 Fluent NHibernate 映射中使用“AlwaysSelectWithValue()”方法。

DiscriminateSubClassesOnColumn("discriminator").AlwaysSelectWithValue();

这迫使 NHIbernate 仅从具有相应子类的数据库中获取结果。

于 2013-10-10T09:22:24.820 回答