C# 具有子类的子类的复杂Fluent Nhibernate建模

C# 具有子类的子类的复杂Fluent Nhibernate建模,c#,nhibernate,fluent-nhibernate,nhibernate-mapping,C#,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我正在将一个项目从定制DAL转移到Nhibernate,但我遇到了一个棘手的映射场景,我不知道如何解决。本质上,子类的子类没有鉴别器值 primary子类有一个鉴别器值,因此这是微不足道的。当我到达第三层时,问题就出现了。子类型之间唯一的区别是哪个表引用了它们(在HasOne样式映射中) 非常感谢您的帮助:)如果您希望第三级对象成为同一个表中的记录,我会在第三级类型中添加一个鉴别器。它可以是基于父类型的计算属性。使用FluentNH,我认为它必须对映射程序可见(你不能使用vanilla NHib

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

primary子类有一个鉴别器值,因此这是微不足道的。当我到达第三层时,问题就出现了。子类型之间唯一的区别是哪个表引用了它们(在HasOne样式映射中)


非常感谢您的帮助:)

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

如果你想把它们都放在同一张桌子上。如果您不太关心模式中的表计数,那么就不能包含鉴别器,并且/或者第三级类型的模式定义差异很大,以至于映射到单个表将提供“奇数”结果(如许多空列或非常通用/非描述性的列名),然后简单地为每个具体的子类型创建一个到不同表的映射

您还可以反规范化模式。因为它是HasOne()关系,所以子类可以使用组件映射包含第三级类的列。如果所有的三级类型都映射到类似的字段,并且您认为这种关系不太可能从1:1变为1:n,那么这可能就是正确的选择。

是的,我刚刚发现了这一点(感谢上帝让单元测试吐出了nhib sql)-不过谢谢!