gpt4 book ai didi

c# - Fluent NHibernate 实体 HasMany 不同子类类型的集合

转载 作者:IT王子 更新时间:2023-10-29 04:17:14 25 4
gpt4 key购买 nike

因此,基本鉴别器映射一切正常。我可以毫无问题地直接与实体 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 的项目在保存聚合时通过级联正确持久化。但是,当检索聚合时,类型区分上存在混淆。

我已经经历了太多不同的可能解决方案,我已经不知道什么是行不通的了。我觉得我不应该为集合提供 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 ,对我来说听起来更像是一个错误

关于c# - Fluent NHibernate 实体 HasMany 不同子类类型的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/985213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com