使Spring.NET 1.3.2支援NHibernate 3.2 ByCode方式的映射

來源:互聯網
上載者:User

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方式的映射類了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.