代码之家  ›  专栏  ›  技术社区  ›  jeff

Nhiberate,多个表,同一类

  •  1
  • jeff  · 技术社区  · 16 年前

    已经被问过无数次了,就像 this .

    假设Invoice是基类,InvoiceHistory是从Invoice继承的类。

    我从Invoice(我想要的,再加上InvoiceHistory)得到所有东西。

    我是否需要拥有InvoiceBase并为Invoice和InvoiceHistory创建派生版本?

    2 回复  |  直到 9 年前
        1
  •  2
  •   jishi    16 年前

    我认为这与NHibernate的多态性有关。尝试在基类(Invoice)的映射上指定polymorphics=“explicit”。

        2
  •  0
  •   zoidbeck    16 年前

    如果您不想检索invoice继承的invoicehistory,则无法实现这一点。即使创建一个InvoiceBase也无济于事。如果您使用的是继承,nhibernate将始终返回数据库中存在的最复杂的对象。因此,如果invoicehistory中有一个外键指向一个invoice,那么您总是会得到invoicehistory对象,而不是一个简单的invoice。这是nhibernate的一个基本特征。
    您可以使用ResultTransformer(有关更多信息,请参阅参考资料)仅获取invoice的属性并手动映射它们,或者创建并映射同样引用invoice表的SimpleInvoice对象,但使用后者,您可能会面临一些过时的状态问题,因为您在同一会话中混合了invoice和SimpleInvoice。 希望这有帮助。