2010-06-10 26 views
1

有人问了一百万次,就好像this不等,多表,同班

说发票是基类,InvoiceHistory是从发票简单继承的类。

当我做了类似 invoiceList = session.CreateCriteria(typeof(Invoice))。List();

我从发票(我想要的,再加上InvoiceHistory的一切)中得到一切。

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

回答

2

我认为这与NHibernate中的多态性有关。尝试在基类(发票)的映射上指定多态性=“显式”。

+0

非常好。谢谢 – jeff 2010-06-11 14:47:04

0

如果你不想检索发票历史的发票继承不会做的伎俩。即使创建一个InvoiceBase也无济于事。如果使用继承,nhibernate将始终返回数据库中最复杂的对象。因此,如果发票历史记录中存在指向发票的外键,您将一直获得发票历史对象而不是简单的发票。这是nhibernate的一个基本特征。
您可以通过使用ResultTransformer(请参阅参考资料中的更多信息)来明确提取发票的属性并映射它们,或者创建并映射也引用发票表的SimpleInvoice对象,但对于后者,您可能会遇到一些问题状态问题是你在同一个会话中混合了Invoice和SimpleInvoice。 希望这有助于。