所以一切都与基本的鉴别器映射很好地协调。我可以毫无问题地直接与实体A和B进行交互。
public class BaseType {}
public class EntityA : BaseType {}
public class EntityB : BaseType {}
这在BaseType映射中没有戏剧地映射为
DiscriminateSubClassesOnColumn<string>("Type")
.SubClass<BaseType>("A", m => { })
.SubClass<BaseType>("B", m => { });
问题发生在:聚合中我们要将集合映射到每个子类
使用如下的映射
public class AggregateMap: BaseMap<Aggregate>
{
public AggregateMap()
{
HasMany<EntityA>(x => x.ACollection).AsSet().Cascade.All();
HasMany<EntityB>(x => x.BCollection).AsSet().Cascade.All();
}
}
这些显然不是完整的映射,但它是描述我正在尝试的最小数量。添加到ACollection和BCollection的项目在保存Aggregate时通过级联正确保留。但是,当检索到聚合时,对类型歧视存在混淆。
我已经经历了许多不同的可能解决方案,我不再知道什么不起作用。我觉得我不应该在集合中提供where子句,但事情对我来说不起作用。
任何线索都会受到赞赏。
答案 0 :(得分:1)
你的映射看起来很奇怪,特别是我觉得它应该像更多一样
DiscriminateSubClassesOnColumn<string>("Type")
.SubClass<EntityA>("A", m => { })
.SubClass<EntityB>("B", m => { });
说过看来这个方法已经折旧了,你应该改为定义以下内容(取自Automapping Subclasses:
public class ParentMap : ClassMap<Parent>
{
public ParentMap()
{
Id(x => x.Id);
Map(x => x.Name);
DiscriminateSubClassesOnColumn("type");
}
}
public class ChildMap : SubclassMap<Child>
{
public ChildMap()
{
Map(x => x.AnotherProperty);
}
}
不确定这会解决它,我还没有遇到你的情景。
修改:问题也被提出here,听起来更像是我的错误