C# NHibernate:每个子类映射的表和新关键字

C# NHibernate:每个子类映射的表和新关键字,c#,nhibernate,inheritance,C#,Nhibernate,Inheritance,我正在尝试使用NHibernate映射每个子类继承结构的表,该结构如下所示: public class BaseClass { public virtual IColllection<BaseClassCollection> Collection { get; set; } } public class ChildClass : BaseClass { public new virtual ICollection<ChildClassCollection>

我正在尝试使用NHibernate映射每个子类继承结构的表,该结构如下所示:

public class BaseClass
{
    public virtual IColllection<BaseClassCollection> Collection { get; set; }
}

public class ChildClass : BaseClass
{
    public new virtual ICollection<ChildClassCollection> Collection { get; set; }
}

在映射子类时,我需要某种方法重写基类中集合属性的类型。NHibernate有可能做到这一点吗?

我认为,让这一点发挥作用的唯一方法是,按照以下思路做一些事情:

public class BaseClass<TChild> where TChild : BaseClassCollection {
    public virtual ICollection<TChild> Collection { get; set; }
}

public class ChildClass<TChild> : BaseClass<TChild> where TChild : ChildClassCollection {
    public override ICollection<TChild> Collection { get; set; }
}

public class BaseClassCollection { }
public class ChildClassCollection : BaseClassCollection { }
公共类基类,其中TChild:BaseClassCollection{
公共虚拟ICollection集合{get;set;}
}
公共类ChildClass:基类,其中TChild:ChildClassCollection{
公共重写ICollection集合{get;set;}
}
公共类基类集合{}
公共类ChildClassCollection:BaseClassCollection{}
问题是
new
关键字破坏了继承性,然后映射依赖于该继承性。你真的应该避免在任何地方使用
new
,因为这不是一个好主意;把NHibernate从混合中去掉,你会得到不同的行为,这取决于你如何分配你的课程;将其转换为
BaseClass
,您将得到与将其转换为
ChildClass
完全不同的结果


如果这不是你想要的答案,我对此表示歉意,但如果你需要使用
新的
关键字,我认为不可能让它正常工作。

我认为让它正常工作的唯一方法是按照以下思路做一些事情:

public class BaseClass<TChild> where TChild : BaseClassCollection {
    public virtual ICollection<TChild> Collection { get; set; }
}

public class ChildClass<TChild> : BaseClass<TChild> where TChild : ChildClassCollection {
    public override ICollection<TChild> Collection { get; set; }
}

public class BaseClassCollection { }
public class ChildClassCollection : BaseClassCollection { }
公共类基类,其中TChild:BaseClassCollection{
公共虚拟ICollection集合{get;set;}
}
公共类ChildClass:基类,其中TChild:ChildClassCollection{
公共重写ICollection集合{get;set;}
}
公共类基类集合{}
公共类ChildClassCollection:BaseClassCollection{}
问题是
new
关键字破坏了继承性,然后映射依赖于该继承性。你真的应该避免在任何地方使用
new
,因为这不是一个好主意;把NHibernate从混合中去掉,你会得到不同的行为,这取决于你如何分配你的课程;将其转换为
BaseClass
,您将得到与将其转换为
ChildClass
完全不同的结果

如果这不是您想要的答案,我对此表示歉意,但如果您需要使用
new
关键字,我认为它不可能正常工作