Nhibernate,多个表,同一个类

时间:2010-06-10 20:36:24

标签: nhibernate

它被问了一百万次,就像this一样。

Say Invoice是基类,InvoiceHistory是继承自Invoice的类。

当我做某事时 invoiceList = session.CreateCriteria(typeof(Invoice))。List();

我从Invoice(我想要的,以及InvoiceHistory中的所有内容)中获取所有内容。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

如果您不想检索发票历史记录,那么继承将无法解决问题。即使创建InvoiceBase也无济于事。如果您正在使用继承,则nhibernate将始终返回数据库中存在的最复杂对象。因此,如果发票历史中有一个指向发票的外键,您将始终获得invoicehistory对象而不是简单的发票。这是nhibernate的一个基本特征 您可以只使用ResultTransformer手动地获取发票的属性并手动映射它们(请参阅参考更多信息)或者创建和映射同时引用发票表的SimpleInvoice对象,但是后者可能会遇到一些状态问题。您在同一会话中混合Invoice和SimpleInvoice。 希望这会有所帮助。