流畅的NHibernate实体HasMany不同子类类型的集合

所以一切都与基本的鉴别器映射很好地协调。 我可以毫无问题地直接与实体A和B进行交互。

public class BaseType {} public class EntityA : BaseType {} public class EntityB : BaseType {} 

这在BaseType映射中没有戏剧性地映射为

 DiscriminateSubClassesOnColumn("Type") .SubClass("A", m => { }) .SubClass("B", m => { }); 

问题发生在:聚合中我们想要将集合映射到每个子类

使用如下的映射

 public class AggregateMap: BaseMap { public AggregateMap() { HasMany(x => x.ACollection).AsSet().Cascade.All(); HasMany(x => x.BCollection).AsSet().Cascade.All(); } } 

这些显然不是完整的映射,但是最低限度的描述我正在尝试的东西。 添加到ACollection和BCollection的项目在保存Aggregate时通过级联正确保留。 但是,当检索到聚合时,对类型歧视存在混淆。

我已经经历了许多不同的可能解决方案,我不再知道哪些不起作用。 我觉得我不应该在集合中提供where子句,但事情对我来说不起作用。

任何线索将不胜感激。

你的映射看起来很奇怪,特别是我认为它应该看起来更像这样

 DiscriminateSubClassesOnColumn("Type") .SubClass("A", m => { }) .SubClass("B", m => { }); 

虽然说似乎该方法已被折旧,但您应该定义以下内容(取自Automapping Subclasses :

 public class ParentMap : ClassMap { public ParentMap() { Id(x => x.Id); Map(x => x.Name); DiscriminateSubClassesOnColumn("type"); } } public class ChildMap : SubclassMap { public ChildMap() { Map(x => x.AnotherProperty); } } 

不确定这会解决它,我还没有遇到你的情况。

编辑 : 这里也提出了这个问题,听起来更像是一个错误