NHibernate 如何处理泛型业务实体类?

理论上来说,泛型业务实体类,只要实例化之后,便与普通的业务实体类并无二致,用NHibernate将其映射到数据表中也应当没有什么不同。但是,由于泛型类本身的语法格式以及实例化时可能涉及到多个程序集等因素,导致映射文件的写法与普通文件有些差异。下面就来详细讲讲这些差异。       
首先,假设我们有一个程序集Assemb,其中包含泛型类Gen<T>和一个普通类Param,我们准备用类Param来实例化Gen,并将其映射到一个表Gen_Param中,那么我们该怎么做?       
尝试1:书写如下的配置文件头(属性等映射略):       这个…………,通不过是显然的,简直藐视xml的语法么!   
<class name="Gen<Param>, Assemb" table="t_Gen_Param">
     
尝试2:找了找Spring.net对泛型的处理方式,书写如下的配置文件头(属性等映射略):      
<class name="Gen &lt; Param &gt; , Assemb" table="t_Gen_Param">
这个与XML兄弟是不冲突了,也有Spring.net的例子作为支撑,可是………… 还是不行? 别忘了,这可是NHibernate!(Spring.net是哪里来的?)         
最终解决方案:采用下面这样变态的写法才是对的!
<class name="Gen`1[Param], Assemb" table="t_Gen_Param">
这么变态的写法,不予评述!能用就行,反正配置文件平时也看不见。
可是,马上又碰到另一个问题: 如果 Gen 和 Param 不在一个程序集里怎么办?为解决此问题,查资料无数,实验无数,终于找到解决方案(过程不再阐述,各位看官自行体会)。 假设 Gen 属于程序集 Assemb, 而 Param属于程序集 Bssemb,那么,下面的写法能够正确地将Gen<param> 映射到表上:
<class name="Gen`1[[Param,Bssemb]], Assemb" table="t_Gen_Param">
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值