NHibernate无法创建抽象类的实例

NHibernate无法创建抽象类的实例,nhibernate,Nhibernate,我有一个类层次结构: Public MustInherit Class SystemSetting Public Property System As Integer Public Property Sequence As Integer Public Property Description As String Public Property Notes As String End Class Public MustInherit Class SystemSe

我有一个类层次结构:

Public MustInherit Class SystemSetting
    Public Property System As Integer
    Public Property Sequence As Integer
    Public Property Description As String
    Public Property Notes As String
End Class

Public MustInherit Class SystemSetting(Of T)
    Inherits SystemSetting

    Public MustOverride Property Value As T
End Class

Public NotInheritable Class StringBasedSystemSetting
    Inherits SystemSetting(Of String)

    Public Overrides Property Value As String
End Class
我有一个映射:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
           assembly="SystemSettings"
           namespace="SystemSettings"
           default-lazy="false">

    <class xmlns="urn:nhibernate-mapping-2.2"
           name="SystemSetting"
           abstract="true">

         <composite-id>
             <key-property name="System" column="SystemId"/>
             <key-property name="Sequence" column="SettingSeq"/>
         </composite-id>

         <discriminator column="SettingType" not-null="true" force="false"/>

         <property name="Description" column="SettingDescription"/>
         <property name="Notes" column="SettingNotes"/>

         <subclass name="StringBasedSystemSetting" discriminator-value="T">
             <property name="Value" column="SettingText"/>
         </subclass>
     </class>
 </hibernate-mapping>
我可以通过删除SystemSetting类的抽象性质来解决这个问题。但是,如果可能的话,我不想破坏我的类设计。当我的映射清楚其抽象性质并使用类型鉴别器时,NH为什么要尝试创建SystemSetting的实例

更新:
如果我用指定的Id替换复合Id,它会工作。

我找到了答案。当使用复合Id时,NH必须使用映射类的实例来表示Id。这就是为什么它试图实例化SystemSetting,而不管“抽象”映射属性如何


更改设计以便将复合Id表示为其自己的类型可以修复此问题。我的基类仍然是抽象的,我的查询现在可以工作了。

你能解释更多关于这方面的细节吗?也许最好直接从马的嘴里说出来:和。
Cannot instantiate abstract class or interface