它被问了一百万次,就像this一样。
Say Invoice是基类,InvoiceHistory是继承自Invoice的类。
当我做某事时 invoiceList = session.CreateCriteria(typeof(Invoice))。List();
我从Invoice(我想要的,以及InvoiceHistory中的所有内容)中获取所有内容。
我是否需要拥有InvoiceBase并为Invoice和InvoiceHistory创建派生版本?
答案 0 :(得分:2)
我认为这与NHibernate中的多态性有关。尝试在基类(Invoice)的映射上指定polymorphism =“explicit”。
答案 1 :(得分:0)
如果您不想检索发票历史记录,那么继承将无法解决问题。即使创建InvoiceBase也无济于事。如果您正在使用继承,则nhibernate将始终返回数据库中存在的最复杂对象。因此,如果发票历史中有一个指向发票的外键,您将始终获得invoicehistory对象而不是简单的发票。这是nhibernate的一个基本特征 您可以只使用ResultTransformer手动地获取发票的属性并手动映射它们(请参阅参考更多信息)或者创建和映射同时引用发票表的SimpleInvoice对象,但是后者可能会遇到一些状态问题。您在同一会话中混合Invoice和SimpleInvoice。 希望这会有所帮助。