日期:2008-04-27 浏览次数:20387 次
配置信息用于指定NH以何种方式访问数据库, 根据这些配置信息, NH动态的创建数据访问对象并与数据库进行交互. 除了.net类库自带的Odbc, OleDb, OracleClient和SqlClient访问方式外, 在0.2版中, NH增加了用于访问MySQL和Firebird的访问方式, 这两种访问方式由第三方组件提供, mono的用户应该高兴了. :)
NH的配置有两种存放方式
配置内容
先来看看配置内容, 下列是一个简单的配置例子:
配置节处理程序
因为NH的配置信息为自定义配置节, 所以必须指定配置节处理程序, NH的配置内容采用key/value形式,这和预定义配置节appSettings是一样的,我们只要用.net内置的配置节处理程序就可以处理NH的配置内容了, 这个处理key/value形式的类就是NameValueSetionHandler.
nhibernate配置节的声明如下:
在nh中, Environment类用于读取配置信息, 代码如下
//*** Environment.cs - 65行 ***
static Environment() {
NameValueCollection props = System.Configuration.ConfigurationSettings.GetConfig("nhibernate") as NameValueCollection;
if (props==null) {
return;
}
foreach(string key in props.Keys) {
properties[key] = props[key];
}
}
这是一个静态构造函数, 在静态成员首次调用时执行.
配置信息放在properties集合中.
//*** Environment.cs - 90行 ***
public static IDictionary Properties {
get {
IDictionary copy = new Hashtable(properties.Count);
foreach(DictionaryEntry de in properties) {
copy[de.Key] = de.Value;
}
return copy;
}
}
Properties属性用于访问配置信息, 注意这里并没有直接返回properties, 而是复制了一个集合用于返回.
曾有网友问为什么不是直接返回properties? 可能的原因是如果返回properties(即引用)话, 那么配置信息将是共享的, 如果在程序中修改了properties, 那么将影响到其它地方.
另外Environment类中还定义了一些属性名称常数.
在程序中操作配置信息
除了在配置文件中指定nh的配置信息外, nh还允许我们在程序中操作配置信息, 这对于一些敏感的数据,如数据库连接串,提供了一种安全的操作方法(可以在程序中加入连接串属性,而不用将其存储在配置文件中).
Configuration类提供提供两个方法和一个属性用于操作配置信息.
//*** Configuration.cs - 637行 ***
public Configuration AddProperties(IDictionary properties) {
foreach(DictionaryEntry de in properties) {
this.properties.Add(de.Key, de.Value);
}
return this;
}
将一个数据字典对象加入到配置属性中.
//**