使Spring.NET 1.3.2支持NHibernate 3.2 ByCode方式的映射
来源:互联网 发布:java创建对象 编辑:程序博客网 时间:2024/06/01 10:06
Spring.NET IoC内建对NHibernate的支持,有个NHibernateTemplate,对应配置文件如下。
<object id="HibernateTemplate" type="Spring.Data.NHibernate.Generic.HibernateTemplate,Spring.Data.NHibernate32"> <property name="SessionFactory" ref="NHibernateSessionFactory" /> <property name="TemplateFlushMode" value="Auto" /> <property name="CacheQueries" value="true" /></object>
里面会需要一个SessionFactory,这东西的配置如下
<object id="CallCenterSessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate32"> <property name="DbProvider" ref="CallCenterDBProvider"/> <property name="MappingAssemblies"> <list> <value>ds.callcenter.fire.DataModel</value> </list> </property>...
但是很遗憾,它里面的MappingAssemblies只支持hbm.xml文件的映射,如何映射ByCode方式的Mapping类呢?
思路是扩展LocalSessionFactoryObject,它很好的考虑了映射的扩展性,提供了PostProcessMappings方法以提供扩展,实现如下:
public class NH32LocalSessionFactoryObject : LocalSessionFactoryObject { public string[] ByCodeMappingAssemblies { set { this.byCodeMappingAssemblies = value; } } public System.Type[] ByCodeMappingTypes { set { this.byCodeMappingTypes = value; } } protected override void PostProcessMappings(Configuration config) { base.PostProcessMappings(config); buildByCodeMappings(config); } private void buildByCodeMappings(Configuration config) { //添加byCode方式的程序集 if (this.byCodeMappingAssemblies != null) { var mapper = new ModelMapper(); foreach (var p in byCodeMappingAssemblies) { mapper.AddMappings(Assembly.Load(p).GetExportedTypes()); } var hbmMapping = mapper.CompileMappingForAllExplicitlyAddedEntities(); config.AddDeserializedMapping(hbmMapping, null); } //添加byCode方式的类型集 if (this.byCodeMappingTypes != null) { var mapper = new ModelMapper(); mapper.AddMappings(byCodeMappingTypes); var hbmMapping = mapper.CompileMappingForAllExplicitlyAddedEntities(); config.AddDeserializedMapping(hbmMapping, null); } } private string[] byCodeMappingAssemblies; private System.Type[] byCodeMappingTypes; }
那新一代的配置文件就是这样的了
<object id="NHibernateSessionFactory" type="ds.gis.user.dal.NH32LocalSessionFactoryObject, ds.gis.user.dal"> <property name="DbProvider" ref="DbProvider"/> <property name="ByCodeMappingAssemblies"> <list> <value>ds.gis.user.dal</value> </list> </property> <property name="ByCodeMappingTypes"> <list> <!--<value>ds.gis.user.dal.mappings.cfg.RegionMap</value>--> </list> </property>...
里面新增了ByCodeMappingAssemblies和ByCodeMappingTypes的节点,它可以读取ByCode方式的映射类了。
- 使Spring.NET 1.3.2支持NHibernate 3.2 ByCode方式的映射
- Spring.NET 1.3.2 集成 NHibernate 3.2
- Spring.NET 1.3.2 集成 NHibernate 3.2 - 5 - 事务管理
- Spring.net+nHibernate的整合
- spring.net + nhibernate 多数据库的支持,以及跨数据库的事物处理的讨论
- 国内第一个支持Spring.NET/NHibernate/Ajax的开源的Framework
- Spring.Net&NHibernate 学习 2
- Spring.NET和NHibernate
- 学习Spring.NET、NHibernate
- NHibernate+Spring.net配置
- NHibernate VS .NET VS DbType 的类型映射关系
- spring.net+NHibernate+asp.net
- 实战C#.NET--Spring.NET & NHibernate的整合
- net的app.config程序配置Spring.net和nhibernate
- net的web.config程序配置MVC3+Spring.net+nhibernate
- 体验 Spring 的 Object/XML 映射支持
- Spring.Net&NHibernate 学习 4
- Spring.Net&NHibernate 学习 5
- ZOJ 3676 排序+二分
- (转)Android游戏开发之游戏帧动画的播放与处理(七)
- ZOJ 3682 简单dp 背包
- CSDN你很好
- poj 3624 (0-1背包)
- 使Spring.NET 1.3.2支持NHibernate 3.2 ByCode方式的映射
- 常见的vc++编译错误
- ffmpeg文档1:制作屏幕录像
- udf udaf udtf
- Oracle 远程连接访问出错ORA-01031:Insufficient privileges!
- 递归回溯 暴力枚举 (总结)
- android开发文档之resource-drawable用法
- ADO 访问SQL数据库
- IIS7集成模式初始化Spring.NET容器(Request is not available in this context exception in Application_Start问题)