最近的项目用NHibernate来做,之前用过Hibernate,感觉相当之好。
还是先来说一下资料在哪里可以找到。主要资料还是在官网www.hibernate.org中的nhibernate区。小结二和三准备把常用的资料都放在文档中。
这一小节开始做一个demo。因为每次我动手开始做demo好像都不是太顺利,从头做起每次都花时间过多,所以做个demo,以后直接就可以测试了。
环境如下:vs2008sp1, nunit, nhibernate1.2.1(下载非安装包的,里面带jetdrive.dll的)
1.新建控制台程序HiberDemo1并加入要用的引用,包括nhibernate和jetdriver的,因为我们用access数据库,比较方便。
2.加两个新文件夹Domain和Mappings,分别用来放pojo和hbm.xml文件的。
3.加入名为hibernate.cfg.xml的xml文件。如果你把nhibernate的架构文件复制到vs2008的安装目录下xml/schema下面,这时就可以选择架构,有自动语法提示。xml内容如下:
- <?xml version="1.0" encoding="utf-8" ?>
- <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
- <session-factory>
- <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
- <property name="dialect">NHibernate.JetDriver.JetDialect, NHibernate.JetDriver</property>
- <property name="connection.driver_class">NHibernate.JetDriver.JetDriver, NHibernate.JetDriver</property>
- <property name="connection.connection_string">Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb</property>
- <property name="show_sql">true</property>
- <mapping file="Mappings/person.hbm.xml"/>
- </session-factory>
- </hibernate-configuration>
可以看到,我们用的数据库是access的,名字叫test.mdb,位置放在debug目录中(就是和生成的程序一个目录)。另外要做一个person的pojo,我们马上来做。
4.在Domain中生成一个person.cs,内容如下:
- namespace HiberDemo1.Domain
- {
- public class person
- {
- virtual public Guid id { get; set; }
- virtual public string lastname { get; set; }
- virtual public string firstname { get; set; }
- virtual public int age { get; set; }
- }
- }
5.在Mappings中生成一个person.hbm.xml文件,同样可以用语法提示,如果你把架构文件加入vs中的话。内容如下:
- <?xml version="1.0" encoding="utf-8" ?>
- <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="HiberDemo1" namespace="HiberDemo1.Domain">
- <class name="person">
- <id name="id">
- <generator class="guid"></generator>
- </id>
- <property name="lastname"/>
- <property name="firstname"/>
- <property name="age"/>
- </class>
- </hibernate-mapping>
hibernate.cfg.xml和person.hbm.xml文件在vs中选择属性,在属性的“复制到输出目录”选择“始终”。
6.这样,基本的配置都有了,有一个配置文件,一个pojo类和其xml。下面来写生成实际数据表的代码吧。如果你想用NUnit就写测试,这里简单起见,直接在Main里面写几行,运行一下。记得加入Nhibernate.cfg和Nhibernate.tool.hbm2ddl命名空间。
- static void Main(string[] args)
- {
- var cfg = new Configuration();
- cfg.Configure();
- new SchemaExport(cfg).Create(true, true);
- Console.WriteLine("hit any key to exit");
- Console.ReadKey();
- }
成功的话,会有这样的图出现:
如果没有sql语句出现,那么肯定是有问题,有时候nhibernate并没有提示错误的地方,这时就要自己细心的找一下啦。我感觉用2.0CR2版的,提示会多一些,但2.0版还不成熟,等成熟再用。
另外如果有出错提示,要多看几层出错源,有时候最外层的出错源提示不是很有针对性。
本文的源代码我会发到csdn的下载中,地址到时候再更新。