step by step castle ActiveRecord示例项目详读之配置信息和初始化

在学习castle过程中发现安装了1.0 Release Candidate 3版本的castle,系统自带了一个ActiveRecord-Samples例子,决定好好研究下:

从 App.cs 开始

  

App.cs 代码

 

关于配置信息:  

可以看到在main()函数第一句就是找配置信息

XmlConfigurationSource source = new XmlConfigurationSource("../appconfig.xml");

appconfig.xml如下:

 

appconfig.xml

 

其实我们应该配置的属性有:

属性名

说明

hibernate.connection.provider_class

定制IConnectionProvider的类型.

例如:full.classname.of.ConnectionProvider (如果提供者创建在NHibernate中), 或者 full.classname.of.ConnectionProvider, assembly (如果使用一个自定义的IConnectionProvider接口的实现,它不属于NHibernate)。

hibernate.connection.driver_class

定制IDriver的类型.

full.classname.of.Driver (如果驱动类创建在NHibernate中), 或者 full.classname.of.Driver, assembly (如果使用一个自定义IDriver接口的实现,它不属于NHibernate)。

hibernate.connection.connection_string

用来获得连接的连接字符串。

hibernate.connection.isolation

设置事务隔离级别. 请检查 System.Data.IsolationLevel 来得到取值的具体意义并且查看数据库文档以确保级别是被支持的。

例如: Chaos, ReadCommitted, ReadUncommitted, RepeatableRead, Serializable, Unspecified

除了上面的ADO.NET属性之外,我们还有如下的可选属性

属性名

说明

hibernate.dialect

NHibernate方言(Dialect)的类名 - 可以让NHibernate使用某些特定的数据库平台的特性

例如: full.classname.of.Dialect(如果方言创建在NHibernate中), 或者full.classname.of.Dialect, assembly (如果使用一个自定义的方言的实现,它不属于NHibernate)。

hibernate.default_schema

在生成的SQL中,scheml/tablespace的全限定名.

例如: SCHEMA_NAME

hibernate.prepare_sql

是否准备sql语句

例如: true | false

hibernate.session_factory_name

SessionFactory被创建后将自动绑定这个名称.

例如: some.name

hibernate.use_outer_join

允许使用外连接抓取。

例如:true | false

hibernate.cache.provider_class

指定一个自定义的CacheProvider缓存提供者的类名

例如: full.classname.of.CacheProvider(如果ICacheProvider创建在NHibernate中), 或full.classname.of.CacheProvider, assembly(如果使用一个自定义的ICacheProvider,它不属于NHibernate)。

hibernate.query.substitutions

把NHibernate查询中的一些短语替换为SQL短语(比如说短语可能是函数或者字符)。

例如: hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC

 

你会发现上面的配置项有的在实例的配置文件中找不到,为什么呢?那是因为配置信息一旦设置了一个hibernate.dialect方言(它是NHibernate.Dialect.Dialect 的一个子类)Hibernate会为上面列出的一些属性使用特殊默认值,省得我们手工指定。

NHibernate SQL 方言对照表:

数据库系统

SQL方言

DB2

NHibernate.Dialect.DB2Dialect

PostgreSQL

NHibernate.Dialect.PostgreSQLDialect

MySQL

NHibernate.Dialect.MySQLDialect

Oracle (any version)

NHibernate.Dialect.OracleDialect

Oracle 9/10g

NHibernate.Dialect.Oracle9Dialect

Sybase

NHibernate.Dialect.SybaseDialect

Microsoft SQL Server 2000

NHibernate.Dialect.MsSql2000Dialect

Microsoft SQL Server 7

NHibernate.Dialect.MsSql7Dialect

Access (Jet)

NHibernate.JetDriver.JetDialect, NHibernate.JetDriver

Firebird

NHibernate.Dialect.FirebirdDialect

配置信息有了,配置方法有几种:

四种:

  1. XmlConfigurationSource配置(就像上面例子中的配置一样)
  2. InPlaceConfigurationSource配置(这是一种硬编码,当配置信息是动态获取的,就用这种方式)

    代码如下: 

    Code

     

    3.使用应用程序的配置文件(Web.config 或者App.config)

 

Code

 

    4.在Web应用程序中的配置(在Web应用程序中使用ActiveRecord,需要指定isWeb="true")

例子:

 

Code

 castle官网上的一些例子:

 

Code

 

关于初始化:

    初始化语句:

    XmlConfigurationSource source = new XmlConfigurationSource("../appconfig.xml");

    ActiveRecordStarter.Initialize( source, typeof(Blog), typeof(Post), typeof(User) );

这时就产生了两个疑问:

  1. 在ActiveRecordStarter.Initialize()我有多少个实例我都要typeof()吗?有没有其他办法?

2.这个是Form程序我可以将初始化语句写在main函数的开头,如果是web程序我将初始化写在哪里?

答案:

1.你可以把实体类的程序集都一起初始化了

例子:ActiveRecordStarter.Initialize(Assembly.Load("BlogSample"), source)

(注意:在程序前using System.Reflection; )

 2.如果是web程序初始化你可以把它放在Global.asaxApplication_ Start方法里面。(注意在前面添加

<%@ Import Namespace="System.Collections" %>
<%@
 Import Namespace="Castle.ActiveRecord" %>
<%@
 Import Namespace="Castle.ActiveRecord.Framework" %>,三个引用)

posted @ 2008-11-16 00:59  心在天  阅读(2062)  评论(0编辑  收藏  举报