我有一个场景,我使用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试图在鉴别器上映射并发现一个不存在的情况。
答案 0 :(得分:0)
解决方案是在Fluent NHibernate映射中使用“AlwaysSelectWithValue()”方法。
DiscriminateSubClassesOnColumn("discriminator").AlwaysSelectWithValue();
这会强制NHIbernate仅从具有相应子类的数据库中获取结果。