NHibernate3新特性初尝

配置文件如下  

ExpandedBlockStart.gif 代码
<? xml version = " 1.0 " ?>
< configuration >
    
< configSections >
        
< section name = " hibernate-configuration "  type = " NHibernate.Cfg.ConfigurationSectionHandler,NHibernate " />
        
< section name = " syscache "  type = " NHibernate.Caches.SysCache.SysCacheSectionHandler,NHibernate.Caches.SysCache "   />
    
</ configSections >
    
< connectionStrings >
        
< add name = " db "  connectionString = " Server=.;Database=NHTest;Trusted_Connection=SSPI " />
        
< add name = " nhtest "  connectionString = " Data Source=orcl; Persist Security Info=True;Integrated Security=False;User ID=nhtest;Password=nhtest; " />
    
</ connectionStrings >

    
<!-- Oracle -->
    
< hibernate - configuration xmlns = " urn:nhibernate-configuration-2.2 " >
        
< session - factory >
            
< property name = " proxyfactory.factory_class " > NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle </ property >
            
< property name = " dialect " > NHibernate.Dialect.Oracle10gDialect,NHibernate </ property >
            
< property name = " connection.driver_class " > NHibernate.Driver.OracleClientDriver,NHibernate </ property >
            
< property name = " connection.connection_string_name " > nhtest </ property >
            
< property name = " adonet.batch_size " > 100 </ property >
            
< property name = " show_sql " > true </ property >
            
< property name = " hbm2ddl.auto " > update </ property >

            
< property name = " cache.provider_class " > NHibernate.Caches.SysCache.SysCacheProvider,NHibernate.Caches.SysCache </ property >
            
<!--< property name = " cache.use_second_level_cache " > true </ property >
            
< property name = " cache.use_query_cache " > true </ property >-->

            
<!--< class - cache  class = " Test.Nh3.Domain, Test.Nh3 "  region = " hourly "  usage = " read-only " />-->

        
</ session - factory >
    
</ hibernate - configuration >
    
< syscache >
        
< cache region = " hourly "  expiration = " 60 "  priority = " 3 "   />
    
</ syscache >

    
< runtime >
        
< assemblyBinding xmlns = " urn:schemas-microsoft-com:asm.v1 " >
            
< dependentAssembly >
                
< assemblyIdentity name = " NHibernate "  publicKeyToken = " AA95F207798DFDB4 "  culture = " neutral " />
                
< bindingRedirect oldVersion = " 0.0.0.0-3.0.0.2002 "  newVersion = " 3.0.0.2002 " />
            
</ dependentAssembly >
        
</ assemblyBinding >
    
</ runtime >
</ configuration >


 初始化Mapper

ExpandedBlockStart.gif 代码
  public  HbmMapping GetMapping()
        {
            
// 初始化ObjectRelationalMapper类
            var orm  =   new  ObjectRelationalMapper();

            
// TablePerClass:每个类一张表映射策略
            
// TablePerClassHierarchy:每个类分层结构一张表映射策略
            
// TablePerConcreteClass:每个具体类一张表映射策略
            orm.TablePerClass < Domain > ();
            
// orm.Patterns.Poids.Add(new GuidCombGeneratorDef());
            
// 在这里可以调用ObjectRelationalMapper类一些方法配置Domain语义
            
// 使用orm参数初始化Mapper类
            var mapper  =   new  Mapper(orm);
            
// 在这里可以调用Mapper类一些方法配置Domain的Mapping
            
// 调用Mapper类的CompileMappingFor方法编译生成HbmMapping对象
             return  mapper.CompileMappingFor( new [] {  typeof (Domain) });
           
        }


初始化config

ExpandedBlockStart.gif 代码
  var nhConfig  =   new  Configuration().Configure();
            nhConfig.AddDeserializedMapping(GetMapping(), 
null );

            
// 配置缓存
            nhConfig.SetProperty(NHibernate.Cfg.Environment.UseSecondLevelCache,  " true " )
                .SetProperty(NHibernate.Cfg.Environment.UseQueryCache, 
" true " )
                .Cache(c 
=>  c.Provider < SysCacheProvider > ())
                .EntityCache
< Domain > (c  =>
                {
                    c.Strategy 
=  EntityCacheUsage.ReadWrite;
                    c.RegionName 
=   " hourly " ;
                });

            
// 配置数据库架构元数据
            
// SchemaMetadataUpdater.QuoteTableAndColumns(nhConfig);
            
// 创建数据库架构
            
// new SchemaExport(nhConfig).Create(false, true);

            var factory 
=  nhConfig.BuildSessionFactory();

            
using  (var s  =  factory.OpenSession())
            {
                
using  (var tx  =  s.BeginTransaction())
                {
                    var domain 
=   new  Domain
                    {
                        Name 
=   " 我的测试 "   +  DateTime.Now.ToString(),
                        Address 
=   " 中国 " ,
                        Picture
= GetPic()
                    };
          
                    s.Save(domain);
                    tx.Commit();
                }
            }


    尽管配置了缓存,性能问题依然出现在picture保存上面,竟然需要20多秒,期待有人能研究出这个解决办法。

 -------------------------------------------------------------

 构造领域模型时需要使用如下代码,等同于在*.hbm.xml文件将实体列映射的类型显式声明

 var mapper = new Mapper(orm);
            mapper.Class<Domain>(dm =>
            {
                dm.Property(x => x.Picture,
                            m => m.Type(NHibernate.NHibernateUtil.BinaryBlob));
            }); 

 

转载于:https://www.cnblogs.com/lae/archive/2010/11/12/1875612.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值