流畅的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); } }
不确定这会解决它,我还没有遇到你的情况。
编辑 : 这里也提出了这个问题,听起来更像是一个错误