[英]NHibernate mapping with a class hierarchy whose base class is abstract and the discriminator is not a string
以下是域模型類:
public abstract class BaseClass
{
...
}
public class ChildClass : BaseClass
{
...
}
請注意,父類是抽象的,這就是在使用流暢的nhibernate進行映射時給我帶來一些困難的原因。 我的鑒別器是一個字節(數據庫中的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
謝謝您的幫助。
我找到了一個解決方法,但這看起來像一個補丁......我在映射文件中添加了以下內容:
SetAttribute("discriminator-value", "-1");
它似乎指示FNH不要使用字符串(我認為它使用類名)作為抽象基類。 為了使它與-1值一起工作,我還將我的鑒別器類型從byte更改為sbyte。
編輯:我錯過了:這是DiscriminateSubClassesOnColumn的第二個參數,它采用默認值。 所以我的問題的正確答案是:
DiscriminateSubClassesOnColumn<sbyte>("Type", (sbyte)-1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.