使Spring.NET 1.3.2支持NHibernate 3.2 ByCode方式的映射
2013-04-22 11:27
513 查看
Spring.NET IoC内建对NHibernate的支持,有个NHibernateTemplate,对应配置文件如下。
里面会需要一个SessionFactory,这东西的配置如下
但是很遗憾,它里面的MappingAssemblies只支持hbm.xml文件的映射,如何映射ByCode方式的Mapping类呢?
思路是扩展LocalSessionFactoryObject,它很好的考虑了映射的扩展性,提供了PostProcessMappings方法以提供扩展,实现如下:
那新一代的配置文件就是这样的了
里面新增了ByCodeMappingAssemblies和ByCodeMappingTypes的节点,它可以读取ByCode方式的映射类了。
<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 - 2 - 配置使用 Spring.NET 的网站
- Spring.NET 1.3.2 集成 NHibernate 3.2 - 1 - 下载软件
- Spring.NET 1.3.2 集成 NHibernate 3.2 - 1 - 下载软件
- Spring.NET 1.3.2 集成 NHibernate 3.2 - 5 - 事务管理
- Spring.NET 1.3.2 集成 NHibernate 3.2 - 5 - 事务管理
- Spring.NET 1.3.2 集成 NHibernate 3.2 - 3 - 监控及日志
- Spring.NET 1.3.2 集成 NHibernate 3.2 - 1 - 下载软件
- Spring.NET 1.3.2 集成 NHibernate 3.2 - 5 - 事务管理
- Spring.NET 1.3.2 集成 NHibernate 3.2 - 4 - 实现基本的数据访问
- NHibernate+spring.net+jquery打造UI控件库(mvc+webform两种实现) usercontrol,jtemplate两种方式打造无刷新分页(附NHbernate+Spring.net源码)
- 国内第一个支持Spring.NET/NHibernate/Ajax的开源的Framework
- 国内第一个支持Spring.NET/NHibernate/Ajax的开源的Framework
- 使用Spring.Net 1.3.2 + NHibernate 3.2的mapping by code和default convention
- spring.net + nhibernate 多数据库的支持,以及跨数据库的事物处理的讨论
- Spring.Net+Nhibernate+Asp.Net Mvc 框架
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (三)实现数据库接口层和业务逻辑层
- springmvc3.2+spring+hibernate4全注解方式整合(四)
- asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式
- C#.NET编程----Spring.NET & NHibernate整合(三)
- 使用ASP.NET Web API自带的类库实现对CORS的支持(在开发中使用这种方式)(转载)