我有以下 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时实例化混凝土

Vehicle /*Concrete1*/ v = session.load<Vehicle>(1);

我怎样才能通过自动映射做到这一点?提前致谢。

编辑1

我开始认为这是不可能的,因此任何解决方法将不胜感激。任何有关 xml(非流畅)版本的线索都可能有很大帮助。

有帮助吗?

解决方案

好吧,首先是坏消息。

  • 您不能将鉴别器放在单独的表中。您可以通过使用带有 join 作为源的 select 语句来解决这个问题 table, ,但是您的实体实际上将是只读的。或者您可以使用视图,它可以工作,但将更多工作委托给数据库。
  • 即使有正确的映射, session.load<Vehicle>(1) 永远不会返回派生类型(除非您禁用延迟加载,这是一个坏主意,或者具体实例已经在会话中加载)。您可以通过以下方式获取具体实例 这个黑客.

现在,您的数据模型看起来与 Vehicle has-a Type 关系比 <ConcreteVehicle> is-a Vehicle 一。

这为您提供了更大的灵活性(例如,您可以更改车辆的类型),并且您可以通过使用策略模式(车辆类型包含行为)来保留多态性特征。

其他提示

我认为这篇文章在nibhernate.info博客上做了你想要做的事情。

http:// nhibernate.info / blog / 2011/02 / 02/02/02/02/02/02/02/02/02/02/02/02/02/02/02/02/02/02/02 / 02/13-Nibernate-3.html

如果不是它可能会给你一个想法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top