相关表格中的fluent nhibernate鉴别器
本文关键字:nhibernate 鉴别 fluent 表格 | 更新日期: 2023-09-27 18:26:00
我有以下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);
我怎么能用自动映射做到这一点?提前谢谢。
第1版
我开始认为这是不可能的,因此任何变通方法都将不胜感激。任何关于xml(非流利)版本的线索都可能有很大帮助。
好吧,首先是坏消息。
- 不能将鉴别器放在单独的表中,句号。您可以通过使用一个带有join的select语句作为源
table
来解决这个问题,但这样您的实体实际上是只读的。或者,您可以使用一个视图,它可以工作,但将更多的工作委派给DB - 即使有正确的映射,
session.load<Vehicle>(1)
也永远不会返回派生类型(除非禁用延迟加载,这是个坏主意,或者具体实例已经在会话中加载了)。你可以用这个技巧得到具体的例子
现在,您的数据模型看起来与Vehicle has-a Type
关系相比,与<ConcreteVehicle> is-a Vehicle
关系更适合使用。
这给了您更多的灵活性(例如,您可以更改车辆的类型),并且您可以通过使用策略模式(车辆类型包含行为)来保持多态性特征。
我认为nhibernate.info博客上的这篇文章符合你的要求。
http://nhibernate.info/blog/2011/02/16/get-load-polymorphism-in-nhibernate-3.html
如果没有,它可能会给你一个想法。