2010-02-17 42 views
1

我有一个父母和孩子的对象。根据父对象中的值更改子对象的表。因此,例如,如果父对象具有参考“01”,则它将在下表中查找“Child01”,而如果参考为“02”,则它将在表格“Child02”中查找。所有的子表都与列/名/数等相同。流利Nhibernate和动态表名

我的问题是,我该如何告诉Fluent Nhibernate或nhibernate查看哪个表,因为每个父对象都是唯一的,并且可以引用许多不同的子表?

我已经看过Fluent中的IClassConvention,但是这似乎只在创建会话时才被调用,而不是每次创建对象时调用。

回答

1

我发现只有两种方法可以做到这一点。

  1. 每当需要查看另一个动态表时,关闭并重新创建nhibernate会话。在创建会话时,使用IClassConvention根据用户数据动态计算名称。我发现这非常密集,因为它是一个大型数据库,每次创建会话都需要昂贵的操作。
  2. 对这些表使用POCO对象进行自定义数据访问。

由于statichippo声明我可以使用basechild对象并有多个子对象。由于数据库的大小和动态表的数量,这不是一个真正有效的选项。

我的两个解决方案都不是特别满意,但POCO似乎是解决我的问题的最佳方法。

0

NHibernate旨在成为一个对象关系映射器。这听起来像你正在做更多的脚本风格,希望能够映射你的数据而不是以OOP方式工作。

这听起来像你有一个类层次结构虽然。它所听起来像你想在你的代码来创建(并相应地图)是不同类型的儿童的层次:

BaseChild

- > SmartChild

- - > DumbChild

每个孩子都是要么机灵还是愚蠢,但因为他们都有一个名字,姓氏,年龄,等等,他们都是我定义这些的BaseChild类的实体。唯一的区别可能是SmartChild有智商,而DumbChild有一个FavoriteFootballTeam(这只是一个例子,当然没有任何人冒犯;)。

NHibernate会让你以多种方式映射这种关系。可能有1个表包含所有类或(听起来像你想要的那样),每个类一个表。

我了解问题/您在找什么?

+0

你有点得到了我以后。我所处的情况是,在这种情况下是“账户”的父类具有“账户信息”的子列表。数据库的结构方式是一个账户有一个与之相关的年份,并且这涉及到账户信息数据库表,因此对于2001年的表格是AcctInfo01,2002是AcctInfo02等等。我不想在我的父(帐户)对象多个列表类我宁愿只有一个属性叫AccountInfo这是一个列表从相关的表。这甚至有可能吗? – lancscoder 2010-02-17 15:20:06

+0

我不知道有一种方法可以做到这一点,但我绝对不是NHibernate的专家。 – hackerhasid 2010-02-17 16:49:29