流利的Nhibernate和动态表名称

时间:2010-02-17 11:02:19

标签: nhibernate orm fluent-nhibernate nhibernate-mapping

我有一个父子对象。根据父对象中的值更改子对象的表。因此,例如,如果父对象具有引用“01”,那么它将在下表“Child01”中查找,而如果引用是“02”,则它将在表“Child02”中查找。所有子表都与列数/名称/等相同。

我的问题是,如何判断Fluent Nhibernate或nhibernate哪个表是唯一的,并且可以引用许多不同的子表?

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

2 个答案:

答案 0 :(得分:1)

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

  1. 每次需要查看另一个动态表时,关闭并重新创建nhibernate会话。在创建会话时,使用IClassConvention根据用户数据动态计算名称。我发现这非常密集,因为它是一个大型数据库,每次创建会话都需要付出昂贵的代价。
  2. 将POCO对象用于具有自定义数据访问权限的这些表。
  3. 正如statichippo所说,我可以使用一个basechild对象并拥有多个子对象。由于数据库大小和动态表的数量,这不是一个真正有效的选项。

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

答案 1 :(得分:0)

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

听起来你有类层次结构的元素。 发声就像你试图在你的代码中创建(然后相应地映射)是不同类型的孩子的层次结构:

  

BaseChild

     

- > SmartChild

     

- > DumbChild

每个孩子要么聪明或愚蠢,但由于他们都有FirstName,LastName,Age等,所以他们都是定义这些的BaseChild类的实例。唯一的区别可能是SmartChild有一个IQ而DumbChild有一个FavoriteFootballTeam(这只是一个例子,当然不会对任何人冒犯;)。

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

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