NHibernate实践的配置1

NHibernate实践的配置1
NH的配置信息的设置 七月 29th, 2007
NHibernate支持多种设置Configuration配置参数的方式,可以把配置参数写在web.config/app.config文件,也可以在创建Configuration对象时,把配置信息赋值给Configuration对象。
http://my.donews.com/buffalo319/category/nhibernate/
http://www.cndaliu.com/Details/103c54e9-f88a-41af-aa10-d72f1e0e2c28.aspx
1、在web.config/app.config的NameValueSectionHandler类型的nhibernate自定义配置节中设置配置参数,NH将在创建Configuration对象时自动设置。
<xml version=1.0 encoding=utf-8 ?> <configuration>   <configSections>     <section        name=nhibernate        type=System.Configuration.NameValueSectionHandler     />    configSections>   <nhibernate>     <add        key=hibernate.connection.provider        value=NHibernate.Connection.DriverConnectionProvider     />     <add        key=hibernate.dialect        value=NHibernate.Dialect.MsSql2000Dialect     />     <add        key=hibernate.connection.driver_class        value=NHibernate.Driver.SqlClientDriver     />     <add        key=hibernate.connection.connection_string        value=Server=localhost;uid=sa;password=sa;database=NHTrial     />   </nhibernate> <configuration> 
然后,我们在程序中只需简单的初始化Configuration对象即可。
Configuration cfg = new Configuration();
2、使用nhibernate配置文件。
把NH提供的nhibernate-configuration-2.0.xsd拷贝到%VS2003安装目录%\Common7\Packages\schemas\xml目录中,可在编写nhibernate配置文件时得到intellisense支持。
下面的nhibernate配置信息和我们刚才在web.config中的设置等价
<xml version=1.0 encoding=utf-8 ?> <hibernate-configuration   xmlns=urn:nhibernate-configuration-2.0 >     <session-factory name=NHConsole>         <property name=connection.provider>NHibernate.Connection.DriverConnectionProviderproperty>         <property name=connection.driver_class>NHibernate.Driver.SqlClientDriverproperty>         <property name=connection.connection_string>Server=localhost;uid=sa;password=sa;database=NHTrialproperty>         <property name=dialect>NHibernate.Dialect.MsSql2000Dialectproperty>      session-factory> </hibernate-configuration> 
不过,我们要采取另一种方法来创建Configuration对象,语句中的fileName为nhibernate配置文件路径:
Configuration cfg = new Configuration().Configure(fileName);
等等,你说NH会不会有默认的nhibernate配置文件?当我们调用
Configuration cfg = new Configuration().Configure();
时,NH将自动查找web.config/app.config文件所在目录下是否存在名为hibernate.cfg.xml的配置文件,并以此文件中的配置信息来初始化Configuration对象。
注意:nhibernate配置文件的设置将覆盖web.config/app.config文件中的配置。且nhibernate配置文件还有更多的用途,这个会在后续文章中介绍。
3、在代码中设置配置参数。
最后,我们也可以在程序代码中通过给Configuration对象的配置属性赋值,如:
Configuration cfg = new Configuration(); cfg.Properties[NHibernate.Cfg.Environment.Dialect] = NHibernate.Dialect.MsSql2000Dialect; Programm._factory = cfg.BuildSessionFactory();
当然,我们一般不会像上面那段代码一样hardcode配置信息,但通过赋值的方式,我们可以自定义的方式去组织和读取配置信息(不同的团队往往有不同的配置信息组织的方式)。
Posted in NHibernate || No Comments »
NHibernate多数据库连接 七月 29th, 2007
A,B,C主机上分别存放了DBa,DBb,DBc数据库,操作过程是将DBa中的a表和DBb中的b表的作连接的一些操作,然后将结果放入DBc的c表中, 原来我一直使用三个数据连接作,先存取这两个数据库到recordset,然后逐条记录进行循环,组合成一组新的纪录数组,然后再写入C主机的DBc中;3个数据库类型都是一致的,链接池是否支持这种数据操作?比如从A,B数据库中分别查询出临时表放入同一个连接池中,直接在连接池中用SQL操作临时表得到最终的结果表c,插入目标库C中;请各位高手赐教;
另外如果A,B不是同一种数据库的情况如何?
=============
1 学习NHibernate的配置中是只有一个数据库连接的,当需要多个不同的数据库连接的时候,可以新增加一个xml配置文件(hibernate.cfg.xml),其内容如:
2
3
4    < hibernate-configuration      xmlns =”urn:nhibernate-configuration-2.0″     >
5            < session-factory    name =”NHibernate.Test” >
6                    <!�C     properties    �C>
7                    < property    name =”connection.provider” > NHibernate.Connection.DriverConnectionProvider </ property >
8                    < property    name =”connection.driver_class” > NHibernate.Driver.SqlClientDriver </ property >
9                    < property    name =”connection.connection_string” > Server=localhost;initial    catalog=nhibernate;Integrated    Security=SSPI </ property >
10                    < property    name =”show_sql” > false </ property >
11                    < property    name =”dialect” > NHibernate.Dialect.MsSql2000Dialect </ property >
12                    < property    name =”use_outer_join” > true </ property >
13                    < property    name =”query.substitutions” > true    1,    false    0,    yes    ’Y',    no    ’N’ </ property >
14                    <!�C     mapping    files    �C>
15                    < mapping    assembly =”NHibernate.Examples”     />
16            </ session-factory >
17
18    </ hibernate-configuration >
19
1 // 代码类似于:     
2
3
4                    private     void     Config( string     configXmlFile,Type[]    types)
5                    {
6                          try
7                          {
8                                   nConfig   =   new    Configuration();
9                                   nConfig.Configure(configXmlFile);
10
11                                  for    (   int    i=0;i<types.Length;i++)
12                                  {
13                                           nConfig.AddClass(types[i]);
14                                   }

15                                   nSessionFactory   =    nConfig.BuildSessionFactory();
16                           }

17                          catch(Exception    e)
18                          {
19                                  throw    e;
20                           }

21                   }

22

Posted in NHibernate || No Comments »
NHibernate配置文件 七月 29th, 2007
有三种方式来存放nhibernate的配置
1, 作为单独的一节放在相应程序的配置文件中,对于执行文件或类库为文件名称后加.config,对于asp.net则是放在web.config中。这种方式必须在配置文件的configSetions中声明nhibernate的配置节,
配置内容由Cfg.Environment类来读取,该类所有成员均为静态的,另外它还定义了配置中key值的常数。
2. 放在一个单独的配置文件中,默认为hibernate.cfg.xml,使用时必须调用Cfg.Configuration.Config()。如不是默认的配置文件名,还必须指明配置文件名称。这种方式最适合多数据库的情况,可以为每个数据库建立一个配置文件。
3. 手工在程序中加入,配置内容最后将加入到Cfg.Configuration.Properties属性中,此属性为一IDictionary对象,并且为public,其余的就不用多话了吧。
下面对几个重要的key值说明一下:
hibernate.connection.provider
连接提供者,取值必须是实现了IConnectionProvider接口的类的全名,当前版本只能取值NHibernate.Connection.DriverConnectionProvider;
hibernate.connection.driver_class
数据驱动类,取值必须是实现了IDriver接口的类的全名,常用的选择有NHibernate.Driver.SqlClientDriver, NHibernate.Driver.OleDbDriver等;
hibernate.dialect
数据库方言,取值必须是继承之Dialect的类的全名,最常用的就是NHibernate.Dialect.MsSql2000Dialect了, 其它的没用过,不清楚能不能正常使用;
hibernate.connection.connection_string
连接字符串,取值与driver_class对应即可;
hibernate.show_sql
指明是否在log4net日志中显示sql语句,主要用于调试,取值为true或false;
完整的配置key列表请查看Cfg.Environment类中的常数声明。
持久对象映射文件
nhibernate为我们提供了很多方式将持久对象映射文件加入到Cfg.Configuration类,下面将其一一列出:
AddXmlFile:加入包括对象映射信息的文件;
AddXmlString:加入包含映射信息的字符串;
AddDocument:加入包含映射信息的Xmldocument;
AddInputStream:加入包含映射信息的输入流;
AddXmlReader:加入包含映射信息的XmlReader;
AddResource:加入指定程序集的映射信息资源;
AddClass:加入以类名指定的映射信息资源,映射文件必须为classname.hbm.xml;
AddAssembly:加入指定程序集名称的映射信息资源
注意:如果映射信息为文件形式,包括加入到程序集资源的文件,那么文件名必须以.hbm.xml结尾。
MS Access 数据库连接配置:
< add key =”hibernate.connection.provider” value =”NHibernate.Connection.DriverConnectionProvider” />
< add key =”hibernate.dialect” value =”NHibernate.JetDriver.JetDialect, NHibernate.JetDriver” />
< add key =”hibernate.connection.driver_class” value =”NHibernate.JetDriver.JetDriver, NHibernate.JetDriver” />
< add key =”hibernate.connection.connection_string” value =”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb” />
MS SQL Server 2000 数据库连接配置:
< add key =”hibernate.connection.driver_class” value =”NHibernate.Driver.SqlClientDriver” />
< add key =”hibernate.dialect”                   value =”NHibernate.Dialect.MsSql2000Dialect” />
< add key =”hibernate.connection.provider”       value =”NHibernate.Connection.DriverConnectionProvider” />
< add key =”hibernate.connection.connection_string” value =”Server=127.0.0.1;UID=sa;Password=***;Initial Catalog=test;Data Source=.” />
Oracle 数据库连接配置:
< activerecord >
    
< config >
        
< add key =”hibernate.connection.driver_class” value =”NHibernate.Driver.OracleClientDriver” />
        
< add key =”hibernate.dialect” value =”NHibernate.Dialect.OracleDialect” />
        
< add key =”hibernate.connection.provider” value =”NHibernate.Connection.DriverConnectionProvider” />
        
< add key =”hibernate.connection.connection_string” value =”Data Source=dm;User ID=dm;Password=dm;” />
    

你可能感兴趣的:(Hibernate,职场,实践,休闲,NHibernate)