簡體   English   中英

NHibernate映射與類層次結構,其基類是抽象的,鑒別器不是字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM