2010-01-15 16 views
0

我有Order类和SubOrder:Order Descendant。现在,Order有.Item和SubOrder(显然)也有,但是SubOrder需要SubItem在那里。创建时很容易:在NHibernate自定义实体创建(施工)

Item = new SubItem((ISomeInterface)this); 

,但我怎么告诉NHibernate的创建子项,而不是项目时负载从数据库亚目(Session.Get <亚目>(ID))?该项目的类型不在数据库中(我不需要也不希望它在那里);它始终是“Order for Item,SubOrder SubItem”。而且,它需要使用(ISomeInterface)SubOrder作为构造函数参数来创建。

总之,我如何管理NHibernate中的自定义实体创建以实现上述内容?创建SubItem时是否可以引用SubOrder(如果没有,我可以使用属性“注入”)?

我大概可以使用IUserType,但它似乎是一种矫枉过正;并且我看不到如何仅将IUserType应用于SubOrder.Item(对于IInterceptor也是如此)。此外,我不知道如何获得对父订单的引用,除了使用SubOrder的OnLoad事件并在其中设置SubItem属性......这很尴尬。

+0

我不明白。 SubItem是否未在NHibernate映射中映射为Item的子类? – hackerhasid 2010-01-15 15:13:30

+0

是的,它没有被映射。正如我所说,我不想映射它,因为这意味着数据库中的附加字段 - 而这纯粹是程序已经可用的静态信息(Order-> Item,SubOrder-> SubItem)。如果可以的话,我可以继续使用映射 - 但是我希望不需要额外的字段来克服某些软件限制。 – queen3 2010-01-15 15:44:48

回答

0

“SubOrder的OnLoad事件并在其中设置SubItem属性” - >这里有一个解决方案。您可以尝试编写一个custom ReflectionOptimizer