我有一个场景,我使用 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 尝试映射到鉴别器并发现不存在的情况。