Fluent Nhibernate和动态表名

Fluent Nhibernate和动态表名,nhibernate,orm,fluent-nhibernate,nhibernate-mapping,Nhibernate,Orm,Fluent Nhibernate,Nhibernate Mapping,我有一个父对象和子对象。根据父对象中的值更改子对象的表。例如,如果父对象有一个引用“01”,那么它将在下表“Child01”中查找,而如果引用是“02”,那么它将在下表“Child02”中查找。所有子表的列数/名称数等都相同 我的问题是,如何告诉Fluent Nhibernate或Nhibernate要查看哪个表,因为每个父对象都是唯一的,并且可以引用多个不同的子表 我已经用Fluent查看了IClassConvention,但它似乎只在创建会话时调用,而不是每次创建对象时调用 NHiberna

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

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


我已经用Fluent查看了IClassConvention,但它似乎只在创建会话时调用,而不是每次创建对象时调用

NHibernate是一个对象关系映射器。这听起来像是在做更多的脚本风格,希望映射数据,而不是以面向对象的方式工作

不过,听起来你似乎具备了类层次结构的素质。听起来,您试图在代码中创建(然后相应地映射)的是不同类型的子对象的层次结构:

卑鄙的孩子

-->聪明的孩子

-->哑巴

每个孩子要么聪明,要么愚蠢,但因为他们都有名字、姓氏、年龄等,所以他们都是定义这些的BaseChild类的实例。唯一的区别可能是聪明的孩子有智商,而愚蠢的孩子有一个最喜欢的足球队(这只是一个例子,当然对任何人都没有冒犯;)

NHibernate将让您以多种方式映射这种关系。可以有一个包含所有类的表,或者(在您的案例中听起来像是您想要的),每个类一个表


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

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

不过,听起来你似乎具备了类层次结构的素质。听起来,您试图在代码中创建(然后相应地映射)的是不同类型的子对象的层次结构:

卑鄙的孩子

-->聪明的孩子

-->哑巴

每个孩子要么聪明,要么愚蠢,但因为他们都有名字、姓氏、年龄等,所以他们都是定义这些的BaseChild类的实例。唯一的区别可能是聪明的孩子有智商,而愚蠢的孩子有一个最喜欢的足球队(这只是一个例子,当然对任何人都没有冒犯;)

NHibernate将让您以多种方式映射这种关系。可以有一个包含所有类的表,或者(在您的案例中听起来像是您想要的),每个类一个表


我了解问题/你在寻找什么吗?

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

  • 每次需要查看另一个动态表时,关闭并重新创建nhibernate会话。在创建会话时,使用IClassConvention根据用户数据动态计算名称。我发现这非常密集,因为它是一个大型数据库,每次创建会话都需要花费大量的操作
  • 对这些具有自定义数据访问的表使用POCO对象
  • 正如statichippo所说的,我可以使用basechild对象并拥有多个子对象。由于数据库的大小和动态表的数量,这实际上不是一个有效的选项


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

    我只找到了两种方法

  • 每次需要查看另一个动态表时,关闭并重新创建nhibernate会话。在创建会话时,使用IClassConvention根据用户数据动态计算名称。我发现这非常密集,因为它是一个大型数据库,每次创建会话都需要花费大量的操作
  • 对这些具有自定义数据访问的表使用POCO对象
  • 正如statichippo所说的,我可以使用basechild对象并拥有多个子对象。由于数据库的大小和动态表的数量,这实际上不是一个有效的选项


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

    你有点明白我的意思。在这种情况下,在本例中是“Account”的父类有一个“Account Information”的子列表。数据库的结构方式是,账户有一个与其关联的年份,这是指账户信息数据库表,因此2001年的表是AcctInfo01,2002年的表是AcctInfo02,依此类推。我不希望在我的父对象(Account)中有多个list类,我希望只有一个名为AccountInfo的属性,它是相关表中的列表。这可能吗?我不知道有什么办法可以做到,但我绝对不是NHibernate专家。你有点明白我的意思。在这种情况下,在本例中是“Account”的父类有一个“Account Information”的子列表。数据库的结构方式是,账户有一个与其关联的年份,这是指账户信息数据库表,因此2001年的表是AcctInfo01,2002年的表是AcctInfo02,依此类推。我不希望在我的父对象(Account)中有多个list类,我希望只有一个名为AccountInfo的属性,它是相关表中的列表。这可能吗?我不知道有什么办法可以做到,但我绝对不是NHibernate专家。