Vb.net Nhibernate与代码继承映射
我有两个类,一个继承自另一个。第一个显示数据的摘要视图(4+列),子视图显示详细视图(40+列)。这两个类都在访问同一个表并共享被访问的相同列 我的子类是否可以继承父类,这样我只需在一个位置更改映射?我不希望重复的代码泛滥 例如: 我想这样做: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
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
}
}