转载自:http://www.cnblogs.com/renrenqq/archive/2006/08/02/466056.html
注:本文中使用的是NH1.0.2.0版本,其他版本配置可能略有不同。
示例代码下载(没看明白的看看这个或许可以明白些)
数据库脚本下载
NHibernate的灵活配置
1.Visual Studio中文件的生成操作
在开始讨论这个话题前,我们想来看看Visual Studio中文件的生成操作。
无(None) - 不在项目输出组中包含该文件,并且在生成进程中不会对其进行编译。例如包含文档的文本文件,如自述文件。
编译(Compile) - 将该文件编译到生成输出中。此设置用于代码文件。
内容(Content) - 不编译该文件,但将其包含在“内容”(Content) 输出组中。例如,此设置是 .htm 或其他类型 Web 文件的默认值。
嵌入的资源(Embedded Resource) - 将该文件作为 DLL 或可执行文件嵌入主项目生成输出中。此设置通常用于资源文件。
对于嵌入的资源,我们可以启动“Visual Studio 2005 命令提示”,输入ildasm命令,使用启动的工具打开程序集文件,然后在MANIFEST中找到资源文件的信息,如下图。可以看见有名为“DDLLY.MyDoc.NHibernateTest.ConfigurationTest.hibernate1.cfg.xml”的资源文件。
2.Configuration配置
配置Configuration需要调用Configuration.Configure,我们来看看Configuration.Configure方法的信息
-
public Configuration Configure();
-
如果存在应用程序配置文件,则使用应用程序配置文件中的<hibernate-configuration>节点配置NHibernate,否则使用hibernate.cfg.xml进行配置。
public Configuration Configure(Assembly,string);
- 使用程序集中的资源配置NHibernate。 public Configuration Configure(string)
- c.使用指定的文件配置NHibernate。 public Configuration Configure(XmlTextReader)
- 使用指定的XmlTextReader配置NHibernate。
我们可以使用多种方式进行配置,比较常见的配置有以下几种
-
a.可以在应用程序配置文件(对于普通程序而言为App.config,对Asp.net是Web.config)中进行配置,调用Configure()配置,配置文件如下
这种配置方式只能对属性进行配置,不能配置映射类,而且应用程序配置文件可能还需要配置其他的信息,容易造成文件过于大,不方面浏览。所以我不推荐这种配置方式。
-
b.单独使用配置文件进行配置
- b1.把配置文件放在程序应用程序同级目录,使用Configure()方法,此时配置文件名应为“hibernate.cfg.xml”
- b2.把配置文件放到某个指定的路径,调用Configure(string)方法
- b3.把配置文件作为资源嵌入到程序集(把文件的生成类型设置为"嵌入的资源"),调用Configure(Assembly,string)方法
- 这是一个典型配置文件
我写了个类来测试
让我们来看看配置文件,配置文件中主要配置的是各种属性和映射类的信息(还有缓存配置方面的信息,将在后面的章节讲到)。
在NHibernate.Cfg.Environment类中可以看到的可用属性信息。
例如Environment中public const string ConnectionString = "hibernate.connection.connection_string";
关于属性的说明可以查看NHibernate的文档。
映射文件的配置有以下几种方法
a.使用程序集中的所有资源文件
b.使用指定文件
c.使用程序集中的指定资源文件
我们也可以使用代码来配置这些内容。
添加程序集中所有以"hbm.xml"为结尾的文件作为映射文件。
示例:cfg.AddAssembly(Assembly.GetExecutingAssembly());
使用协定从应用程序资源读取一个映射。类 Foo.Bar.Foo被映射为名为Foo.Bar.Foo.hbm.xml的嵌入在类所在的程序集中的资源文件。
示例:cfg.AddClass(typeof (User));
从一个特别的XML文件读取映射。这个方法和AddXmlFile作用一样。
示例:cfg.AddFile("User.hbm.xml");
添加一个IDictionary类型的属性集合。Key是属性名,Value是属性的值。
示例:
//添加连接字符串属性
Hashtable properties = new Hashtable();
properties.Add(Environment.ConnectionString, //NHibernate.Cfg.Environment类中有所有的可属性信息
"server=.;database=user;uid=sa;pwd=App1234;");
cfg.AddProperties(properties);
我比较喜欢使用配置文件里面配置程序集的做法,因为这种做法最简单直接。
我们也可以把两种方式结合起来使用,例如我们可以在配置文件中配置好除连接字符串外的其它信息,然后在代码中添加连接字符串。
不管是映射信息还是属性信息最终都回被设置到Configuration里,我们可以查看Configuration的ClassMappings和Properties来查看这些信息。
同样我也写了两个类,前一个用来测试配置映射类。后一个用来测试配置属性。
测试配置映射
测试配置属性