Tricky Fluent Nhibernate使用子类的子模型进行建模

时间:2010-09-16 19:04:54

标签: c# nhibernate fluent-nhibernate nhibernate-mapping

我正在将一个项目从自定义DAL移到Nhibernate上,但我遇到了一个棘手的映射场景,我不知道如何解决。本质上,有一个没有鉴别器值的子类的子类。

主要子类具有鉴别器值,因此非常简单。当我到达第三级时会出现问题。子子类型之间的唯一区别是哪个表引用它们(在HasOne样式映射中)。

非常感谢任何帮助,谢谢:)

1 个答案:

答案 0 :(得分:3)

如果你想让第三级对象成为同一个表中的记录,我会在第三级类型中添加一个鉴别器。它可以是基于父类型的计算属性。使用FluentNH,我认为它确实必须对mapper可见(你不能使用vanilla NHibernate反复检查私有成员的技巧)。

如果您想将它们全部放在同一个表中,那就是这样。如果你不太关心模式中的表计数,你根本就不能包含一个鉴别器,和/或第三级类型的模式定义足够不同,映射到单个表会提供“奇怪”的结果(像很多空列或非常通用/非描述性的列名一样),然后只需为每个具体子类型创建一个到不同表的映射。

您还可以对架构进行反规范化。由于它是HasOne()关系,因此子类可以使用Component映射包含第三级类的列。如果所有第三级类型都映射到相似的字段,并且您认为这种关系不太可能从1:1更改为1:n,那么这可能是最佳选择。