27
因此,一切工作都很好,基本鉴别器映射。我可以直接与实体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子句,但事情对我来说并不合适。
任何线索,将不胜感激。
错误通过“关于类型的歧视混乱”,你的意思是,这两个集返回所有的类型?不管他们的歧视? – 2009-06-12 07:44:38
我现在已经离开工作,所以不记得确切的错误。像'无法加载EntityA类型的实体,因为它不匹配指定的EntityB'。 我们使用HasMany映射中的字符串在Where子句中入侵,并通过鉴别器列手动过滤。我只是认为这种类型会“流过”,而且决定将自动执行。 – berko 2009-06-12 07:58:56
是的,要直接回答你的问题......我认为它试图加载所有类型,不管鉴别器如何。 – berko 2009-06-12 08:00:02