流利的NHibernate实体不同子类类型的HasMany集合
问题描述:
因此,一切工作都很好,基本鉴别器映射。我可以直接与实体A和B进行交互,没有任何问题。流利的NHibernate实体不同子类类型的HasMany集合
public class BaseType {}
public class EntityA : BaseType {}
public class EntityB : 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的项目在保存聚合时通过级联正确保持。但是,在检索汇总时,对类型歧视存在混淆。
我已经运行了很多不同的可能的解决方案,我不知道什么都不起作用。我觉得我不应该在集合上提供一个where子句,但事情对我来说并不合适。
任何线索,将不胜感激。
答
您的映射看起来很奇怪,尤其是我觉得它应该更这样
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,听起来更像我
错误通过“关于类型的歧视混乱”,你的意思是,这两个集返回所有的类型?不管他们的歧视? – 2009-06-12 07:44:38
我现在已经离开工作,所以不记得确切的错误。像'无法加载EntityA类型的实体,因为它不匹配指定的EntityB'。 我们使用HasMany映射中的字符串在Where子句中入侵,并通过鉴别器列手动过滤。我只是认为这种类型会“流过”,而且决定将自动执行。 – berko 2009-06-12 07:58:56
是的,要直接回答你的问题......我认为它试图加载所有类型,不管鉴别器如何。 – berko 2009-06-12 08:00:02