我的以下3个表的示例值为
Vehicles ( id = 1, type_id = 20 , ... )
Vehicle_Types ( vt_id = 20, class_id = 160, ... )
Vehicle_Classes ( vcls_id = 160, name = "Concrete1" )
我有
public class Concrete1 : Vehicle
{
}
我希望nhibernate在加载车辆#1时实例化Concrete1 在
Vehicle /*Concrete1*/ v = session.load<Vehicle>(1);
我怎么能用自动化做到这一点?提前谢谢。
的 EDIT1 的
我开始认为这是不可能的,因此任何解决方法都会受到赞赏。 xml(非流利)版本的任何线索都可能是一个很大的帮助。
答案 0 :(得分:1)
好的,首先是坏消息。
table
的select语句来解决这个问题,但是你的实体实际上是只读的。或者您可以使用可以工作的视图,但可以将更多工作委派给数据库。session.load<Vehicle>(1)
也永远不会返回派生类型(除非您禁用延迟加载,这是一个坏主意,或者具体实例已在会话中加载)。您可以使用this hack获取具体实例。现在,您的数据模型似乎与Vehicle has-a Type
关系比<ConcreteVehicle> is-a Vehicle
关系效果更好。
这为您提供了更大的灵活性(例如,您可以更改车辆的类型),并且您可以通过使用策略模式(车辆类型包含行为)来保持多态性功能。
答案 1 :(得分:0)
我认为nhibernate.info博客上的这篇文章可以帮助您实现目标。
http://nhibernate.info/blog/2011/02/16/get-load-polymorphism-in-nhibernate-3.html
如果没有,它可能会给你一个想法。