9

這裏是域模型類:用類層次結構,其基類NHibernate的映射是抽象的,辨別是不是字符串

public abstract class BaseClass 
{ 
... 
} 

public class ChildClass : BaseClass 
{ 
... 
} 

注意,父類是抽象的,這是給我的一些困難什麼時候來流利nhibernate映射的時間。我的鑑別器是一個字節(DB中的tinyint)。因爲它不是一個字符串,我不能管理設置在基類中的鑑別值,這不起作用(取自測繪類BaseClass的):

DiscriminateSubClassesOnColumn<byte>("Type") 
    .SubClass<ChildClass>() 
    .IsIdentifiedBy((byte)OperationType.Plan) 
    .MapSubClassColumns(p => { ... }) 

該錯誤消息我得到的是:

類初始化方法UnitTest1.MyClassInitialize拋出異常。 NHibernate.MappingException:NHibernate.MappingException:無法格式鑑別值爲SQL實體的字符串BaseClass ---> System.FormatException:輸入字符串的格式不正確。

以下文章似乎解釋了會發生什麼。他們提供了一個解決方案與XML但不是流利的nhibernate:http://forum.hibernate.org/viewtopic.php?t=974225

感謝您的幫助。

+0

感謝您使用XML鏈接到解決方案 - 正是我需要的! – 2011-07-07 15:02:37

回答

12

我已經找到一種解決方法,但是這似乎那麼像一個補丁... 添加以下映射文件:

SetAttribute("discriminator-value", "-1"); 

它似乎指示FNH不使用字符串(我認爲這使用類名稱)作爲抽象基類。 爲了使它與-1值一起工作,我還將鑑別器類型從字節改爲了sbyte。

編輯: 我錯過了:這是DiscriminateSubClassesOnColumn採用默認值的第二個參數。所以我的問題的正確答案是:

DiscriminateSubClassesOnColumn<sbyte>("Type", (sbyte)-1) 
+0

非常感謝 - 我有一個類似的問題,鑑別器不是一個字符串。 – Ted 2009-02-26 01:18:54

相關問題