2013-07-02 39 views
0

我有一個場景,我正在使用nhibernate將記錄從一個表映射到基於鑑別器的幾個不同的派生類。處理其中不存在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

解決方案是在Fluent NHibernate映射中使用「AlwaysSelectWithValue()」方法。

DiscriminateSubClassesOnColumn("discriminator").AlwaysSelectWithValue(); 

這迫使NHIbernate只從數據庫中獲取具有相應子類的結果。

相關問題