相关表中的流畅的 nhibernate 判别器
-
13-11-2019 - |
题
我有以下 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博客上做了你想要做的事情。
如果不是它可能会给你一个想法。
不隶属于 StackOverflow