Vb.net Nhibernate与代码继承映射

Vb.net Nhibernate与代码继承映射,vb.net,nhibernate,mapping-by-code,Vb.net,Nhibernate,Mapping By Code,我有两个类,一个继承自另一个。第一个显示数据的摘要视图(4+列),子视图显示详细视图(40+列)。这两个类都在访问同一个表并共享被访问的相同列 我的子类是否可以继承父类,这样我只需在一个位置更改映射?我不希望重复的代码泛滥 例如: 我想这样做: Public Class ParentMapping Inherits ClassMapping(Of Parent) Public Sub New() Me.Property(Function(x) x.MyProp, Sub(y) y.co

我有两个类,一个继承自另一个。第一个显示数据的摘要视图(4+列),子视图显示详细视图(40+列)。这两个类都在访问同一个表并共享被访问的相同列

我的子类是否可以继承父类,这样我只需在一个位置更改映射?我不希望重复的代码泛滥

例如:

我想这样做:

Public Class ParentMapping
    Inherits ClassMapping(Of Parent)
Public Sub New()
 Me.Property(Function(x) x.MyProp, Sub(y) y.column("MyProp"))
 Me.Property(Function(x) x.MyProp2, Sub(y) y.column("MyProp2"))
End Sub
End Class

Public Class ChildMapping
Inherits SubClassMapping(of Child)
 Public Sub New()
  ' I want to be able to inherit the mappings of the parent here.
  MyBase.New()

  Me.Property(Function(x) x.MyProp3, Sub(y) y.column("MyProp3"))
 End Sub
End Class

如果您希望子类也是db中父类的子类,则需要一个鉴别器列

如果您只想重用代码,那么就共享一个映射基类

public abstract class ParentChildMapping<T> : ClassMapping<T> where T : Parent
{
    public ParentChildMapping()
    {
    // map shared properties here
    }
}

public class ParentMapping : ParentChildMapping<Parent>
{
}

public class ChildMapping : ParentChildMapping<Child>
{
    public ChildMapping()
    {
    // map additional properties here
    }
}
公共抽象类ParentChildMapping:ClassMapping其中T:Parent
{
公共ParentChildMapping()
{
//在此处映射共享属性
}
}
公共类ParentMapping:ParentChildMapping
{
}
公共类ChildMapping:ParentChildMapping
{
公共子映射()
{
//在此映射其他属性
}
}

这与我之前所做的类似,但当我的域上下文指定父对象时,NHibernate似乎返回子对象。NHibernate的查询包括仅在子对象上的属性…我做了一些更改,到目前为止,它仍然有效。我将报告其他问题。当您将父对象映射为基类时,它当然会返回所有父对象,子对象也是父对象。因为父对象是数据的摘要,而子对象是详细数据(两者都使用同一个表,没有鉴别器),所以所有对象都将作为子对象返回。这挫败了我想要达到的目的。最后,我让另一个类继承父类,并将该类用作摘要的对象,我将继续处理细节对象。详细对象将具有鉴别器。
public abstract class ParentChildMapping<T> : ClassMapping<T> where T : Parent
{
    public ParentChildMapping()
    {
    // map shared properties here
    }
}

public class ParentMapping : ParentChildMapping<Parent>
{
}

public class ChildMapping : ParentChildMapping<Child>
{
    public ChildMapping()
    {
    // map additional properties here
    }
}