2011-04-29 63 views
0

坦率地说,我不知道该怎么搜索我的问题,所以在这里。HNibernate的单向继承

我正在尝试一些不同的方法来开始一个新项目。

我有一个PostgreSQL DBMS。我有一个具有多个模式的数据库。这个想法是有一个“根”模式,作为其他模式的基础。 我试图实现的是一种“单向”继承。我希望在根表中查询不要查看子类模式,但我还没有找到一种方法来实现这一点。

查询子类时,我想加入基类,但是在查询基类时,我不想查询子类。

我明白不同的继承方法之间的区别,但我只是不确定是否可以尝试做什么。

我的当前设置实际上可以在不同模式中使用子类,但是当查询基类时,NHibernate会去查询每个子类,以查看基类是否是这些类型中的任何一个。

也许这种行为在某些情况下是合适的,但在其他情况下,我只想查询基本类“单独”。

作为另一个要求,基类无法知道子类(它们就像插件/扩展)。

希望以上内容有任何意义 - 这有点难以表达。

在此先感谢...

回答

0

我想通了。我的问题是在我的SubclassMap<>。显然,NHibernate不支持连接子类的显式多态。我现在使用ClassMap<>加入每个子类,并调用Join(...)。在这种情况下,显式多态性起作用。

+0

...但是,我似乎无法找到级联插入和更新的方法..? – Siewers 2011-05-02 18:19:06

+0

您能否提供此解决方案的映射示例?我遇到了同样的问题。 – arathorn 2011-10-05 15:35:18

+0

这取决于你正在尝试做什么。 'SubclassMap <>'确实有效,但它通过在SQL输出中创建'select case then'语句来实现。当你有很多子类时,这对性能有相当大的影响。我所做的是试验不同的继承策略,并且在某个时候提出了只是执行常规'ClassMap <>'的解决方案,然后在每个映射中调用'Join(...)'。幸运的是,我们选择简化数据模型,因此继承不再是必需的。 – Siewers 2011-10-05 20:32:33

1
+0

我确实看过这个,但我真的无法让它与FluentNHibernate一起工作。我需要做些什么特别的事吗? – Siewers 2011-04-30 09:35:45

+1

我尝试过'Polymorphism.Explicit();'在我的基类'ClassMap <>'中,但它没有任何区别。难道是因为不同的模式? – Siewers 2011-04-30 10:17:31

+0

我给你一个确认我对显式多态的理解的赞成票,但是,我实际上回答了我自己的问题:) – Siewers 2011-04-30 11:12:00