ber*_*rko 27 c# nhibernate-mapping fluent-nhibernate
所以一切都与基本的鉴别器映射很好地协调.我可以毫无问题地直接与实体A和B进行交互.
public class BaseType {}
public class EntityA : BaseType {}
public class EntityB : BaseType {}
Run Code Online (Sandbox Code Playgroud)
这在BaseType映射中没有戏剧性地映射为
DiscriminateSubClassesOnColumn<string>("Type")
.SubClass<BaseType>("A", m => { })
.SubClass<BaseType>("B", m => { });
Run Code Online (Sandbox Code Playgroud)
在以下情况下会出现问题:在聚合中,我们要将集合映射到每个子类
使用如下的映射
public class AggregateMap: BaseMap<Aggregate>
{
public AggregateMap()
{
HasMany<EntityA>(x => x.ACollection).AsSet().Cascade.All();
HasMany<EntityB>(x => x.BCollection).AsSet().Cascade.All();
}
}
Run Code Online (Sandbox Code Playgroud)
这些显然不是完整的映射,但是最低限度的描述我正在尝试的东西.添加到ACollection和BCollection的项目在保存Aggregate时通过级联正确保留.然而,当检索到聚合时,对类型歧视存在混淆.
我已经经历了许多不同的可能解决方案,我不再知道什么不起作用.我觉得我不应该在集合上提供where子句,但事情对我来说不起作用.
任何线索将不胜感激.
你的映射看起来很奇怪,特别是我认为它应该看起来更像这样
DiscriminateSubClassesOnColumn<string>("Type")
.SubClass<EntityA>("A", m => { })
.SubClass<EntityB>("B", m => { });
Run Code Online (Sandbox Code Playgroud)
话虽如此,该方法似乎已被弃用,您应该定义以下内容(取自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);
}
}
Run Code Online (Sandbox Code Playgroud)
但不确定这是否能解决这个问题,我还没有遇到你的情况。
编辑:这个问题也在这里提出,对我来说听起来更像是一个错误